ITEEDU

swing的版面结构

版面管理器

事件处理

鼠标事件

键盘事件处理

窗口与面板的使用

JInternalFrame的使用(窗口与面板)

JTabbedPane,JScroolPane,JScrolBa的使用

标签与按钮的使用与介绍

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

表格(Table)的使用与介绍

JTable的事件处理

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

树(Tree)的使用与介绍

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

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

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

Slider,Timer,Progress的使用

JTabbedPane,JScroolPane,JScrolBa的使用

6-1-1:JTabbedPane的使用:

类层次结构图:
java.lang.Object
    --java.awt.Component
    --java.awt.Container
            --javax.swing.JComponent
            --javax.swing.JTabbedPane

JTabbedPane构造函数:

JTabbedPane():建立一个空的JTabbedPane对象。

JTabbedPane(int tabPlacement):建立一个空的JTabbedPane对象,并指定摆放位置,如TOP,BOTTOM,LEFT,RIGHT.

JTabbedPane的事件处理模式: JTabbedPane以处理ChangeEvent事件为主。每当在JTabbedpane选换标签时,都会产生ChangeEvent事件。

因此要处理选换标签所对应的操作,必须实现ChangeListener这个interface.另外JTabbedPane上的每个标签都有索引值(index),一般若没有加以设置 ,索引置从左到右依次是0,1,2.....,依此类推,因此下例中,Picture的索引值为0,Label 2的索引值为1。一个标签都有所对应的操作。

例子: JTabbedPane2.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; /*由于ChangeEvent是属于Swing的事件,而不是AWT的事件,因此import Swing的事件类来处理
 *ChangeEvent事件。
 */
import javax.swing.event.*;

public class JTabbedPane2 implements ActionListener, ChangeListener {
	int index = 0;
	int newNumber = 1;
	JTabbedPane tabbedPane = null;

	public JTabbedPane2() {
		JFrame f = new JFrame("JTabbedPane2");
		Container contentPane = f.getContentPane();

		JLabel label1 = new JLabel(new ImageIcon(".\\icons\\flower.jpg"));
		JPanel panel1 = new JPanel();
		panel1.add(label1);

		JLabel label2 = new JLabel("Label 2", JLabel.CENTER);
		label2.setBackground(Color.pink);
		label2.setOpaque(true);
		JPanel panel2 = new JPanel();
		panel2.add(label2);

		JLabel label3 = new JLabel("Label 3", JLabel.CENTER);
		label3.setBackground(Color.yellow);
		label3.setOpaque(true);
		JPanel panel3 = new JPanel();
		panel3.add(label3);

		tabbedPane = new JTabbedPane();
		tabbedPane.setTabPlacement(JTabbedPane.TOP);// 设置标签置放位置。
		/*
		 * 由于ChangeEvent是属于Swing的事件,而不是AWT的事件,因此import Swing的事件类来处理
		 * ChangeEvent事件。
		 */
		tabbedPane.addChangeListener(this);
		tabbedPane.addTab("Picture", null, panel1, "图案");
		tabbedPane.addTab("Label 2", panel2);
		tabbedPane.addTab("Label 3", null, panel3, "label");
		tabbedPane.setEnabledAt(2, false);// 设Label 3标签为Disable状态
		JButton b = new JButton("新增标签");
		b.addActionListener(this);
		contentPane.add(b, BorderLayout.SOUTH);
		contentPane.add(tabbedPane, BorderLayout.CENTER);

		f.pack();
		f.show();
		f.addWindowListener(new WindowAdapter() {
			public void WindowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}

	/*
	 * 实现ChangeListener方法,目的在使若左边的标签有点选过,右边的标签才会显示Enable状态。getSelectedIndex()方法可返回
	 * 目前点选标签的index值
	 * ,getTabCount()方法可返回JTabbedPane上目前共有几个标签,而setEnabledAt()方法则是使某个标签
	 * 的状态为Enable或Disable(true为Enable,false为Disable).
	 */
	public void stateChanged(ChangeEvent e) {
		if (index != tabbedPane.getSelectedIndex()) {
			if (index < tabbedPane.getTabCount() - 1)
				tabbedPane.setEnabledAt(index + 1, true);
		}
		index = tabbedPane.getSelectedIndex();
	}

	/*
	 * 实现ActionListener接口,当用户按下"新增标签"按钮时,就会在tabbedPane上新增一个Disable状态的标签。
	 */
	public void actionPerformed(ActionEvent e) {
		JPanel pane1 = new JPanel();
		JLabel label4 = new JLabel("new label" + newNumber, JLabel.CENTER);
		label4.setOpaque(true);
		pane1.add(label4);
		tabbedPane.addTab("new " + newNumber, pane1);
		tabbedPane.setEnabledAt(newNumber + 2, false);
		newNumber++;
		tabbedPane.validate();
	}

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