Swing增加了一些不同類型的按鈕,並且它同樣可以修改選擇組件的結構:所有的按鈕、復選框、單選鈕,甚至從AbstractButton處繼承的菜單項(這是因為菜單項一般被包含在其中,它可能會被改進命名為“AbstractChooser”或者相同的什麼名字)。我們會注意使用菜單項的簡便,下面的例子展示了不同類型的可用的按鈕:
//: Buttons.java // Various Swing buttons package c13.swing; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.plaf.basic.*; import javax.swing.border.*; public class Buttons extends JPanel { JButton jb = new JButton("JButton"); BasicArrowButton up = new BasicArrowButton( BasicArrowButton.NORTH), down = new BasicArrowButton( BasicArrowButton.SOUTH), right = new BasicArrowButton( BasicArrowButton.EAST), left = new BasicArrowButton( BasicArrowButton.WEST); public Buttons() { add(jb); add(new JToggleButton("JToggleButton")); add(new JCheckBox("JCheckBox")); add(new JRadioButton("JRadioButton")); JPanel jp = new JPanel(); jp.setBorder(new TitledBorder("Directions")); jp.add(up); jp.add(down); jp.add(left); jp.add(right); add(jp); } public static void main(String args[]) { Show.inFrame(new Buttons(), 300, 200); } } ///:~
JButton看起來像AWT按鈕,但它沒有更多可運行的功能(像我們後面將看到的如加入圖像等)。在com.sun.java.swing.basic裡,有一個更合適的BasicArrowButton按鈕,但怎樣測試它呢?有兩種類型的“指針”恰好請求箭頭按鈕使用:Spinner修改一個中斷值,並且StringSpinner通過一個字符串數組來移動(當它到達數組底部時,甚至會自動地封裝)。ActionListeners附著在箭頭按鈕上展示它使用的這些相關指針:因為它們是Bean,我們將期待利用方法名,正好捕捉並設置它們的值。
當我們運行這個程序例子時,我們會發現觸發按鈕保持它最新狀態,開或時關。但復選框和單選鈕每一個動作都相同,選中或沒選中(它們從JToggleButton處繼承)。