緇ф壙JButton錛屽仛涓涓渾褰㈢殑鎸夐挳銆?/p>
榪欐槸涓涓緥瀛愶紝鏍規嵁榪欎釜錛屾垜浠繕鍙互鎻忕敾鍑哄緢澶氱壒鍒殑UI銆?/p>
1
/** *//**
2
* @author bzwm
3
*
4
*/
5
import java.awt.Color;
6
import java.awt.Cursor;
7
import java.awt.Dimension;
8
import java.awt.FlowLayout;
9
import java.awt.Graphics;
10
import java.awt.Shape;
11
import java.awt.event.MouseEvent;
12
import java.awt.geom.Ellipse2D;
13
import javax.swing.JButton;
14
import javax.swing.JFrame;
15
public class CircleButton extends JButton
{
16
private Shape shape = null;// 鐢ㄤ簬淇濆瓨鎸夐挳鐨勫艦鐘?鏈夊姪浜庝睛鍚崟鍑繪寜閽簨浠?nbsp;
17
18
public CircleButton(String label)
{
19
super(label);
20
this.addMouseListener(new java.awt.event.MouseAdapter()
{
21
/** *//**
22
* {@inheritDoc}
23
*/
24
public void mouseEntered(MouseEvent e)
{
25
((JButton)e.getSource()).setCursor(new Cursor(Cursor.HAND_CURSOR));
26
}
27
/** *//**
28
* {@inheritDoc}
29
*/
30
public void mouseExited(MouseEvent e)
{
31
((JButton)e.getSource()).setCursor(new Cursor(Cursor.MOVE_CURSOR));
32
}
33
});
34
Dimension size = getPreferredSize();// 鑾峰彇鎸夐挳鐨勬渶浣沖ぇ灝?nbsp;
35
// 璋冩暣鎸夐挳鐨勫ぇ灝?浣夸箣鍙樻垚涓涓柟褰?nbsp;
36
size.width = size.height = Math.max(size.width, size.height);
37
setPreferredSize(size);
38
// 浣縥button涓嶇敾鑳屾櫙,鍗充笉鏄劇ず鏂瑰艦鑳屾櫙,鑰屽厑璁告垜浠敾涓涓渾鐨勮儗鏅?nbsp;
39
setContentAreaFilled(false);
40
}
41
// 鐢誨浘鐨勬寜閽殑鑳屾櫙鍜屾爣絳?nbsp;
42
protected void paintComponent(Graphics g)
{
43
if (getModel().isArmed())
{
44
// getModel鏂規硶榪斿洖榧犳爣鐨勬ā鍨婤uttonModel
45
// 濡傛灉榧犳爣鎸変笅鎸夐挳錛屽垯buttonModel鐨刟rmed灞炴т負鐪?nbsp;
46
g.setColor(Color.LIGHT_GRAY);
47
} else
{
48
// 鍏朵粬浜嬩歡鐢ㄩ粯璁ょ殑鑳屾櫙鑹叉樉紺烘寜閽?nbsp;
49
g.setColor(getBackground());
50
}
51
// fillOval鏂規硶鐢諱竴涓煩褰㈢殑鍐呭垏妞渾,騫朵笖濉厖榪欎釜妞渾
52
// 褰撶煩褰負姝f柟褰㈡椂,鐢誨嚭鐨勬き鍦嗕究鏄渾
53
g.fillOval(0, 0, getSize().width - 1, getSize().height - 1);
54
// 璋冪敤鐖剁被鐨刾aintComponent鐢繪寜閽殑鏍囩鍜岀劍鐐規墍鍦ㄧ殑灝忕煩褰?nbsp;
55
super.paintComponents(g);
56
}
57
// 鐢ㄧ畝鍗曠殑寮у厖褰撴寜閽殑杈圭晫
58
protected void paintBorder(Graphics g)
{
59
g.setColor(getForeground());
60
// drawOval鏂規硶鐢葷煩褰㈢殑鍐呭垏妞渾,浣嗕笉濉厖,鍙敾鍑轟竴涓竟鐣?nbsp;
61
g.drawOval(0, 0, getSize().width - 1, getSize().height - 1);
62
}
63
// 鍒ゆ柇榧犳爣鏄惁鐐瑰湪鎸夐挳涓?nbsp;
64
public boolean contains(int x, int y)
{
65
// 濡傛灉鎸夐挳杈規,浣嶇疆鍙戠敓鏀瑰彉,鍒欎駭鐢熶竴涓柊鐨勫艦鐘跺璞?nbsp;
66
if ((shape == null) || (!shape.getBounds().equals(getBounds())))
{
67
// 鏋勯犳き鍦嗗瀷瀵硅薄
68
shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
69
}
70
// 鍒ゆ柇榧犳爣鐨剎,y鍧愭爣鏄惁钀藉湪鎸夐挳褰㈢姸鍐?nbsp;
71
return shape.contains(x, y);
72
}
73
public static void main(String[] args)
{
74
JButton button = new CircleButton("Click me");// 浜х敓涓涓渾褰㈡寜閽?nbsp;
75
//button.setBackground(Color.green);// 璁劇疆鑳屾櫙鑹蹭負緇胯壊
76
// 浜х敓涓涓鏋舵樉紺鴻繖涓寜閽?nbsp;
77
JFrame frame = new JFrame("鍥懼艦鎸夐挳");
78
frame.getContentPane().setBackground(Color.yellow);
79
frame.getContentPane().setLayout(new FlowLayout());
80
frame.getContentPane().add(button);
81
frame.setSize(200, 200);
82
frame.setVisible(true);
83
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
84
}
85
}
----2009騫?2鏈?2鏃?

]]>