天天看點

《Java 2 圖形設計卷Ⅱ- SWING》第9章 反轉按鈕、複選框和單選框

第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(