• 2006-01-03

    [原创]java做的椭圆形按钮

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://henterji.blogbus.com/logs/2034344.html

    import java.awt.Color;
    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);
    }
    }

    收藏到:Del.icio.us




    评论

  • very good!!