第9章 反轉按鈕、複選框和單選框
本章介紹三種Swing按鈕:反轉按鈕、複選按鈕和單選按鈕,它們分别由JToggleButton、JCheckBox和JRadioButton類代表。
這三種按鈕都是AbstractButton類的最終擴充。AbstractButton類實作了這三個類提供的幾乎所有功能。有關AbstractButton類的更多資訊,請參見第8章“标簽與按鈕”。
9.1 JToggleButton類
例9-1 JToggleButton的一個簡單例子
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test extends JApplet {
public Test() {
Container contentPane = getContentPane();
ImageIcon icon = new ImageIcon("togglebuttonImage.gif");
JToggleButton button = new JToggleButton(icon);
contentPane.setLayout(new FlowLayout());
contentPane.add(button);
}
9.1.1 JToggleButton屬性
9.1.2 JToggleButton事件
例9-2 用一個子項監聽器來處理反轉按鈕的選取操作
import javax.swing.event.*;
final JToggleButton button = new JToggleButton(icon);
button.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
int state = e.getStateChange();
String s;
if(state == ItemEvent.SELECTED) s = "selected";
else s = "deselected";
showStatus("Item Event: " + s);
});
9.1.3 JToggleButton類總結
例9-3 建立反轉按鈕
Icon icon = new ImageIcon("beach_umbrella.gif");
JToggleButton button_1 = new JToggleButton(),
button_2 = new JToggleButton(icon),
button_3 = new JToggleButton(icon, true),
button_4 = new JToggleButton("beach"),
button_5 = new JToggleButton("beach",true),
button_6 = new JToggleButton("beach",icon),
button_7 = new JToggleButton("beach",icon,
true);
contentPane.add(button_1);
contentPane.add(button_2);
contentPane.add(button_3);
contentPane.add(button_4);
contentPane.add(button_5);
contentPane.add(button_6);
contentPane.add(button_7);
9.1.4 AWT相容
9.2 按鈕框
例9-4 為互相排斥的選取行為使用一個按鈕組
ButtonGroup group = new ButtonGroup();
JToggleButton[] buttons = new JToggleButton[] {
new JToggleButton(new ImageIcon("ballot_box.gif")),
new JToggleButton(new ImageIcon("palette.gif")),
new JToggleButton(new ImageIcon("light_bulb1.gif")),
new JToggleButton(new ImageIcon("dining.gif")),
new JToggleButton(new ImageIcon("scissors.gif")),
new JToggleButton(new ImageIcon("tricycle.gif")),
};
Box box = Box.createVerticalBox();
for(int i=0; i < buttons.length; ++i) {
group.add(buttons[i]);
box.add(Box.createVerticalStrut(5));
box.add(buttons[i]);
contentPane.add(box);
9.3 複選框
例9-5 運作中的Swing複選框
public void init() {
contentPane.add(new PrintOptionsPanel(this), "Center");
class PrintOptionsPanel extends JPanel {
JCheckBox oddPages, evenPages, collate, lastFirst;
Listener listener = new Listener();
JApplet applet;
public PrintOptionsPanel(JApplet applet) {
this.applet = applet;
oddPages = new JCheckBox("Odd Pages");
evenPages = new JCheckBox("Even Pages");
collate = new JCheckBox("Collate");
lastFirst = new JCheckBox("Last Page First");
oddPages.addItemListener (listener);
evenPages.addItemListener(listener);
collate.addItemListener (listener);
lastFirst.addItemListener(listener);
add(oddPages);
add(evenPages);
add(collate);
add(lastFirst);
class Listener implements ItemListener {
public void itemStateChanged(ItemEvent event) {
applet.showStatus(
"Odd Pages: " + oddPages.isSelected() + ", " +
"Even Pages: " + evenPages.isSelected() + ", " +
"Collate: " + collate.isSelected() + ", " +
"Last Page First: " + lastFirst.isSelected());
9.3.1 JCheckBox屬性
9.3.2 JCheckBox事件
9.3.3 JCheckBox類總結
例9-6 執行個體化複選框
Icon icon = new ImageIcon("bulb.gif");
JCheckBox[] checkboxes = new JCheckBox[] {
new JCheckBox(),
new JCheckBox(icon),
new JCheckBox(icon, true),
new JCheckBox("idea!"),
new JCheckBox("idea!",true),
new JCheckBox("idea!",icon),
new JCheckBox("idea!",icon, true)
for(int i=0; i < checkboxes.length; ++i) {
checkboxes[i].setBorderPainted(true);
contentPane.add(checkboxes[i]);
if(checkboxes[i].getIcon() != null) {
System.out.println("setting selected icon");
checkboxes[i].setSelectedIcon(
new ImageIcon("bulb_bright.gif"));
9.4 單選鈕
例9-7 運作中的單選鈕
contentPane.add(new PrintRangePanel(100, 101));
class PrintRangePanel extends JPanel {
JRadioButton printAll, printRange;
JLabel startPage, endPage;
JTextField startField, endField;
public PrintRangePanel(int start, int end) {
ButtonGroup group= new ButtonGroup();
printAll = new JRadioButton("Print All");
printRange = new JRadioButton("Print Range");
startPage = new JLabel("Start Page:");
endPage = new JLabel("End Page:");
startField = new JTextField(Integer.toString(start));
endField = new JTextField(Integer.toString(end));
add(printAll); add(printRange);
add(startPage); add(startField);
add(endPage); add(endField);
printRange.setSelected(true);
group.add(printAll);
group.add(printRange);
printRange.addItemListener(new ItemListener() {
if(printRange.isSelected()) {
startField.setEnabled(true);
endField.setEnabled (true);
startPage.setEnabled (true);
endPage.setEnabled (true);
//startPage.repaint();
//endPage.repaint();
startField.requestFocus();
printAll.addItemListener(new ItemListener() {
if(printAll.isSelected()) {
startField.setEnabled(false);
endField.setEnabled (false);
startPage.setEnabled (false);
endPage.setEnabled (false);
startPage.repaint();
endPage.repaint();
9.4.1 JRadioButton屬性
9.4.2 JRadioButton事件
9.4.3 JRadioButton類總結
例9-8 執行個體化單選按鈕
JRadioButton[] radioButtons = new JRadioButton[] {
new JRadioButton(),
new JRadioButton(icon),
new JRadioButton(icon, true),
new JRadioButton("idea!"),
new JRadioButton("idea!",true),
new JRadioButton("idea!",icon),
new JRadioButton("idea!",icon, true)
for(int i=0; i < radioButtons.length; ++i) {
radioButtons[i].setBorderPainted(true);
contentPane.add(radioButtons[i]);
if(radioButtons[i].getIcon() != null) {
radioButtons[i].setSelectedIcon(