-
2006-01-03
[原创]java做的椭圆形按钮
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
import java.awt.Color;
http://henterji.blogbus.com/logs/2034344.html
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class EclipseButton extends JComponent implements MouseListener,
MouseMotionListener {
static public Color ACTIVE_COLOR = Color.red;
static public Color INACTIVE_COLOR = Color.darkGray;
protected String text;
protected Ellipse2D ellipse2D;
protected Rectangle rectangle;
protected boolean isActive;
protected static EclipseButton button;
public EclipseButton(Ellipse2D ellipse2D, String text) {
this.ellipse2D = ellipse2D;
setText(text);
setOpaque(false);
addMouseListener(this);
addMouseMotionListener(this);
rectangle = new Rectangle(ellipse2D.getBounds());
rectangle.grow(1, 1);
setBounds(rectangle);
}
public void setText(String t) {
text = t;
}
public String getText() {
return text;
}
public void mouseMoved(MouseEvent e) {
if (!rectangle.contains(e.getX(), e.getY()) || e.isConsumed()) {
if (isActive) {
isActive = false;
repaint();
}
return;
}
int x = e.getX() - rectangle.x;
int y = e.getY() - rectangle.y;
boolean active = ellipse2D.contains(x, y);
if (isActive != active)
setState(active);
if (active)
e.consume();
}
public void mouseDragged(MouseEvent e) {
}
protected void setState(boolean active) {
isActive = active;
repaint();
if (active) {
if (button != null)
button.setState(false);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} else {
button = null;
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked");
}
public void mousePressed(MouseEvent e) {
System.out.println("mousePressed");
}
public void mouseReleased(MouseEvent e) {
System.out.println("mouseReleased");
}
public void mouseExited(MouseEvent e) {
System.out.println("mouseExited");
mouseMoved(e);
}
public void mouseEntered(MouseEvent e) {
System.out.println("mouseEntered");
mouseMoved(e);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Ellipse2D e2 = new Ellipse2D.Float(0, 0, 100, 50);
g2.setColor(isActive ? ACTIVE_COLOR : INACTIVE_COLOR);
g2.draw(e2);
}
public static void main(String[] argv) {
JFrame f = new JFrame();
f.setSize(400, 300);
Ellipse2D p = new Ellipse2D.Float(0, 0, 100, 50);
EclipseButton btn = new EclipseButton(p, "button");
f.getContentPane().add(btn);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}随机文章:
Java swing tutorial Website 2006-09-29Swing and Roundabouts 4: Grid Bag Grease 2006-07-28JCheckBoxMenuItem & JRadioButtonMenuItem 2006-07-11Make JComboBox popup wide enough 2006-06-29
收藏到:Del.icio.us








评论