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處繼承)。