《Java 2 图形设计卷Ⅱ- SWING》第9章 反转按钮、复选框和单选框

简介: 第9章 反转按钮、复选框和单选框  本章介绍三种Swing按钮:反转按钮、复选按钮和单选按钮,它们分别由JToggleButton、JCheckBox和JRadioButton类代表。

9章 反转按钮、复选框和单选框

  本章介绍三种Swing按钮:反转按钮、复选按钮和单选按钮,它们分别由JToggleButtonJCheckBoxJRadioButton类代表。
  这三种按钮都是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 java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Test extends JApplet {
public Test() {
Container contentPane = getContentPane();
ImageIcon icon = new ImageIcon("togglebuttonImage.gif");
final JToggleButton button = new JToggleButton(icon);

contentPane.setLayout(new FlowLayout());
contentPane.add(button);

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 创建反转按钮


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet {
public Test() {
Container contentPane = getContentPane();
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.setLayout(new FlowLayout());
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 为相互排斥的选取行为使用一个按钮组


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet {
public Test() {
Container contentPane = getContentPane();
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]);
}
box.add(Box.createVerticalStrut(5));
contentPane.add(box);
}
}


9.3 复选框

 

9-5 运行中的Swing复选框


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JApplet {
public void init() {
Container contentPane = getContentPane();
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 实例化复选框


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet {
public Test() {
Container contentPane = getContentPane();
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)
};
contentPane.setLayout(new FlowLayout());

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 运行中的单选钮


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet {
public void init() {
Container contentPane = getContentPane();

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() {
public void itemStateChanged(ItemEvent event) {
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() {
public void itemStateChanged(ItemEvent event) {
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 实例化单选按钮


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet {
public Test() {
Container contentPane = getContentPane();
Icon icon = new ImageIcon("bulb.gif");
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)
};
contentPane.setLayout(new FlowLayout());

for(int i=0; i < radioButtons.length; ++i) {
radioButtons[i].setBorderPainted(true);
contentPane.add(radioButtons[i]);

if(radioButtons[i].getIcon() != null) {
System.out.println("setting selected icon");
radioButtons[i].setSelectedIcon(
new ImageIcon("bulb_bright.gif"));
}
}
}
}


 

 

 

目录
相关文章
|
3月前
|
安全 Java API
|
3月前
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
22 1
|
3月前
|
SQL Java 数据库连接
【Java】Java Swing 图书管借阅管理系统(源码+论文)【独一无二】
【Java】Java Swing 图书管借阅管理系统(源码+论文)【独一无二】
145 0
|
3月前
|
存储 数据可视化 Java
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
【Java】Java swing 民宿管理系统 GUI(源码+可视化界面)【独一无二】
|
4月前
|
Java 容器
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
|
5月前
|
前端开发 Java UED
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
Java中的图形用户界面编程:Swing与JavaFX的比较与应用
|
5月前
|
数据可视化 前端开发 Java
Java中的图形用户界面开发
Java中的图形用户界面开发
|
10天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
6天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
25 9
|
9天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####