swing是一個為java設計的gui工具包。
swing是java基礎類的一部分。
swing包括了圖形用戶界面(gui)器件如:文本框,按鈕,分隔窗格和表。
swing提供許多比awt更好的屏幕顯示元素。它們用純java寫成,所以同java本身一樣可以跨平臺運行,這一點不像awt。它們是jfc的一部分。它們支持可更換的面板和主題(各種操作系統默認的特有主題),然而不是真的使用原生平臺提供的設備,而是僅僅在表面上模仿它們。這意味著你可以在任意平臺上使用java支持的任意面板。輕量級組件的缺點則是執行速度較慢,優點就是可以在所有平臺上采用統一的行為。
下面看看實現按鈕的簡單實例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import java.awt.*; import java.awt.geom.*; import javax.swing.*; class rbutton extends jbutton { public rbutton(string label) { super (label); // 這些聲明把按鈕擴展為一個圓而不是一個橢圓。 dimension size = getpreferredsize(); size.width = size.height = math.max(size.width, size.height); setpreferredsize(size); // 這個調用使jbutton不畫背景,而允許我們畫一個圓的背景。 setcontentareafilled( false ); this .setbackground(color.gray); } // 畫圓的背景和標簽 protected void paintcomponent(graphics g) { if (getmodel().isarmed()) { // 你可以選一個高亮的顏色作為圓形按鈕類的屬性 g.setcolor(color.lightgray); } else { g.setcolor(getbackground()); } g.filloval( 0 , 0 , getsize().width - 1 , getsize().height - 1 ); // 這個調用會畫一個標簽和焦點矩形。 super .paintcomponent(g); } // 用簡單的弧畫按鈕的邊界。 protected void paintborder(graphics g) { g.setcolor(getforeground()); g.drawoval( 0 , 0 , getsize().width - 1 , getsize().height - 1 ); } // 偵測點擊事件 shape shape; public boolean contains( int x, int y) { // 如果按鈕改變大小,產生一個新的形狀對象。 if (shape == null || !shape.getbounds().equals(getbounds())) { shape = new ellipse2d. float ( 0 , 0 , getwidth(), getheight()); } return shape.contains(x, y); } // 測試程序 public static void main(string[] args) { // 產生一個帶‘jackpot'標簽的按鈕。 jbutton button = new rbutton( "jackpot" ); imageicon ic = new imageicon( "e://clientformssql//icons//item_group.gif" ); jbutton button2 = new jbutton(ic); button.setbackground(color.gray); // 產生一個框架以顯示這個按鈕。 jframe frame = new jframe(); frame.setdefaultcloseoperation(jframe.exit_on_close); // frame.getcontentpane().setbackground(color.gray); frame.getcontentpane().add(button); frame.getcontentpane().add(button2); frame.getcontentpane().setlayout( new flowlayout()); frame.setsize( 200 , 200 ); frame.setvisible( true ); } } |
結果:
接著再分享一則實現簡單點擊事件的按鈕java示例。
這是一個關于制作圓形swing按鈕的技巧。事實上,這個技巧中的知識方便的適用于任何形狀的按鈕,但我們只作一個圓形的按鈕。當你制作一個圓形的按鈕時,需要做兩件事。第一件事是重載一個適當的繪畫方法以畫出一個圓形。第二件事是設置一些事件使得只有當你點擊圓形按鈕的范圍中的時侯按鈕才會作出響應(不是包含圓形按鈕的矩形的范圍中)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import java.awt.*; import java.awt.geom.*; import javax.swing.*; public class roundbutton extends jbutton { public roundbutton(string label) { super (label); // 這些聲明把按鈕擴展為一個圓而不是一個橢圓。 dimension size = getpreferredsize(); size.width = size.height = math.max(size.width, size.height); setpreferredsize(size); // 這個調用使jbutton不畫背景,而允許我們畫一個圓的背景。 setcontentareafilled( false ); } // 畫圓的背景和標簽 protected void paintcomponent(graphics g) { if (getmodel().isarmed()) { // 你可以選一個高亮的顏色作為圓形按鈕類的屬性 g.setcolor(color.lightgray); } else { g.setcolor(getbackground()); } g.filloval( 0 , 0 , getsize().width - 1 , getsize().height - 1 ); // 這個調用會畫一個標簽和焦點矩形。 super .paintcomponent(g); } // 用簡單的弧畫按鈕的邊界。 protected void paintborder(graphics g) { g.setcolor(getforeground()); g.drawoval( 0 , 0 , getsize().width - 1 , getsize().height - 1 ); } // 偵測點擊事件 shape shape; public boolean contains( int x, int y) { // 如果按鈕改變大小,產生一個新的形狀對象。 if (shape == null || !shape.getbounds().equals(getbounds())) { shape = new ellipse2d. float ( 0 , 0 , getwidth(), getheight()); } return shape.contains(x, y); } // 測試程序 public static void main(string[] args) { // 產生一個帶‘jackpot'標簽的按鈕。 jbutton button = new roundbutton( "jackpot" ); button.setbackground(color.green); // 產生一個框架以顯示這個按鈕。 jframe frame = new jframe(); frame.getcontentpane().setbackground(color.yellow); frame.getcontentpane().add(button); frame.getcontentpane().setlayout( new flowlayout()); frame.setsize( 150 , 150 ); frame.setvisible( true ); } } |
結果:
點擊事件:
由于我們想保留jbutton的大部分功能,我們讓roundbutton類繼承了jbutton類。在roundbutton的構造方法中,setcontentareafilled()方法被調用。這就讓按鈕畫了一個矩形的焦點區,但不畫背景。
現在我們需要畫一個圓的背景。這是通過重載paintcomponent()方法實現的。那個方法使用graphics.filloval()方法畫一個實心的圓。然后paintcomponent()方法調用super.paintcomponent()在這個實心圓的上面畫了一個標簽。
這個例子還重載了paintborder()方法以在圓形按鈕的邊界上畫一個邊。如果你不想要邊框,你也可以不重載這個方法。這個方法調用了graphics.drawoval()方法以在圓的邊界上畫一個細的邊框。
注意:在jdktm1.2.2中,當你將鼠標拖進或拖出按鈕的范圍時,jbutton的行為有一個小bug。理論上,當你在圓形按鈕上點擊鼠標然后拖動鼠標離開按鈕的邊界時,按鈕應該改變它的外形。當你拖動鼠標進入按鈕的邊界內時,按鈕應回復它的外形。不幸的是,包含這個行為的代碼不能調用contains()方法。代替它的是只使用按鈕的‘限制范圍'(這是包含按鈕的最小矩形范圍)注意,如果你在圓形邊界內輕微的拖動鼠標,也就是說離開圓形的范圍但不離開邊界,按鈕將不會改變它的外形。
總結
以上就是本文關于java編程實現swing圓形按鈕實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://blog.csdn.net/zhengjianqi/article/details/2169421