ITEEDU

swing的版面结构

版面管理器

事件处理

鼠标事件

键盘事件处理

窗口与面板的使用

JInternalFrame的使用(窗口与面板)

JTabbedPane,JScroolPane,JScrolBa的使用

标签与按钮的使用与介绍

[复选框、选项按钮、列表方框、下拉式列表的使用与介绍]

表格(Table)的使用与介绍

JTable的事件处理

1文字输入组件的使用与介绍

树(Tree)的使用与介绍

对话框(Option Pane与Dialog)的使用与介绍

菜单与工具栏的使用与介绍

文件选择对话框,颜色选择对话框,分隔线的使用与介绍.

Slider,Timer,Progress的使用

[复选框、选项按钮、列表方框、下拉式列表的使用与介绍]

7-1:使用JCheckBox组件: 类层次结构图:

java.lang.Object
    --java.awt.Component
     --java.awt.Container
       --javax.swing.JComponent
          --javax.swing.AbstractButton
            --javax.swing.JToggleButton
              --javax.swing.JCheckBox

JCheckBox与JRadioButton为JToggleButton的子类,因此它们可以使用AbstractButton抽象类里面许多好用的方法,如addItemLi stener()、setText()、isSelected()等等。

构造函数:
  • JCheckBox():建立一个新的JChcekBox.
  • JCheckBox(Icon icon):建立一个有图像但没有文字的JCheckBox.
  • JCheckBox(Icon icon,boolean selected):建立一个有图像但没有文字的JCheckBox,且设置其初始状态(有无被选取)。
  • JCheckBox(String text):建立一个有文字的JCheckBox.
  • JCheckBox(String text,boolean selected):建立一个有文字的JCheckBox,且设置其初始状态(有无被选取)。
  • JCheckBox(String text,Icon icon):建立一个有文字且有图像的JCheckBox,初始状态为无被选取。
  • JCheckBox(String text,Icon icon,boolean selected):建立一个有文字且有图像的JCheckBox,且设置其初始状态(有无被选取 )。

7-1-1:构造JCheckBox组件:

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

public class JCheckBox1 {
	public static void main(String[] args) {
		JFrame f = new JFrame("JCheckBox1");
		Container contentPane = f.getContentPane();
		contentPane.setLayout(new GridLayout(2, 1));
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(1, 3));
		p1.setBorder(BorderFactory.createTitledBorder("你最喜欢哪一家快餐店呢?"));
		JCheckBox c1 = new JCheckBox("麦当劳");
		JCheckBox c2 = new JCheckBox("肯德基");
		JCheckBox c3 = new JCheckBox("21世纪");
		p1.add(c1);
		p1.add(c2);
		p1.add(c3);
		JPanel p2 = new JPanel();
		p2.setLayout(new GridLayout(2, 1));
		p2.setBorder(BorderFactory.createTitledBorder("以下为JCheckBox的图形示范:"));
		JCheckBox c4 = new JCheckBox("图形1", new ImageIcon(".\\icons\\x.jpg"));
		JCheckBox c5 = new JCheckBox("图形2", new ImageIcon(".\\icons\\x.jpg"));
		p2.add(c4);
		p2.add(c5);
		contentPane.add(p1);
		contentPane.add(p2);
		f.pack();
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
}

7-1-2:JCheckBox事件处理:

你可以在上面的选项中勾选你喜欢吃的快餐店,在勾选的过程中,你可以发现它是可以复选的。但在图形选项中,我们并无法 清楚用户是否选择此项目,因为选或不选图形都一样。为解决这个问题,我们要使用到事件处理方法。当JCheckBox中的选项被选取 或取消时,它会触发ItemEvent的事件,ItemEvent这个类共提供了4种方法可以使用,分别是getItem()、getItemSelectable()、 getStateChange()、paramString()。getItem()与paramString()方法会返回一些这个JCheckBox的状态值。一般我们较少用到这两 个方法。

getItemSelectable()相当于getSource()方法,一样都是返回触发事件的组件,用来判断是那个组件产生事件。在上一章中我 们曾经说过,getSource()方法是EventObject类所提供,而所有事件类都会继承这个类,因此所有的事件我们均能用getSource() 方法来判断到底是哪个组件触发了事件。

最后getStateChange()方法会返回此组件到底有没有被选取。这个方法会返回一个整数值。而我们可以用ItemEvent所提供的类 变量;若被选取则返回SELECTED,若没有被选取则返回DESELECTED.

下面这个范例我们即利用ItemListener来选取图形产生变化,ItemListener这个inteface只有定义一个方法,那就是 itemStateChange(ItemEvent e),因此我们只需实作这个方法.

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

public class JCheckBox2 implements ItemListener {
	JFrame f = null;
	JCheckBox c4 = null;
	JCheckBox c5 = null;

	JCheckBox2() {
		f = new JFrame("JCheckBox");
		Container contentPane = f.getContentPane();
		contentPane.setLayout(new GridLayout(2, 1));
		JPanel p1 = new JPanel();
		p1.setLayout(new GridLayout(1, 3));
		p1.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一家速食店呢?"));
		JCheckBox c1 = new JCheckBox("麦当劳");
		JCheckBox c2 = new JCheckBox("肯德鸡");
		JCheckBox c3 = new JCheckBox("21世纪");
		p1.add(c1);
		p1.add(c2);
		p1.add(c3);
		JPanel p2 = new JPanel();
		p2.setLayout(new GridLayout(2, 1));
		p2.setBorder(BorderFactory.createTitledBorder("您喜欢哪种程序语言,喜欢的请打勾:"));
		c4 = new JCheckBox("JAVA", new ImageIcon(".\\icons\\x.jpg"));
		c5 = new JCheckBox("C++", new ImageIcon(".\\icons\\x.jpg"));
		c4.addItemListener(this);
		c5.addItemListener(this);
		p2.add(c4);
		p2.add(c5);
		contentPane.add(p1);
		contentPane.add(p2);
		f.pack();
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	public void itemStateChanged(ItemEvent e) {
		if (e.getStateChange() == e.SELECTED) {
			if (e.getSource() == c4)
				c4.setIcon(new ImageIcon(".\\icons\\r.jpg"));
			if (e.getSource() == c5)
				c5.setIcon(new ImageIcon(".\\icons\\r.jpg"));

		} else {
			if (e.getSource() == c4)
				c4.setIcon(new ImageIcon(".\\icons\\x.jpg"));
			if (e.getSource() == c5)
				c5.setIcon(new ImageIcon(".\\icons\\x.jpg"));
		}
	}

	public static void main(String args[]) {
		new JCheckBox2();
	}
}