java学习笔记14——Java Swing

前面提过(在该系列笔记6中提过)," AWT(Abstract Window Tool,抽象窗口工具箱)是JAVA中面向图形编程的基础,其中,AWT是JAVA 1.0提出的,其后,SWING是在JAVA1.2提出的新的界面库,但是SWING并不是说取代了AWT,在JAVA1.1中,AWT事件处理模型有了根本改变。而SWING仍然使用的是Java1.1的事件处理模型。",Java Swing是一套功能强大、结构完整的用户图形界面工具包 。
一、Swing概述
1  Swing的历史 
2  Swing组件 
(1)Swing组件几乎都是轻量组件,所以轻量组件最终必须包含在一个重量容器中 
由于轻量组件不在本地不透明的窗口中绘制,因此,它们可以有透明的背景。透明的背景使显示的轻量组件可以是非矩形的 
(2) Swing包含250多个类,是组件和支持类的集合 ,有些是UI组件,有些是支持类 
见书P270
3  Swing小应用程序 

实例见例14。1

import javax.swing.*;//注意:是javax
import java.awt.*;
import java.awt.event.*;

public class TestSWING extends JFrame{
	public TestSWING(){
		super("An Application using Swing");

		Container contentPane=getContentPane();

		Icon icon=new ImageIcon("swing.gif","An advanced GIF of Duke on a swing");

		JLabel label=new JLabel("Swing!",icon,SwingConstants.CENTER);

		contentPane.add(label,BorderLayout.CENTER);
	}

	public static void main(String args[]){
		final JFrame f=new TestSWING();

		f.setBounds(100,100,300,250);
		f.setVisible(true);
		f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

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

框架倒还不涉及另外去下包,不像JMF

4  Swing应用程序 
实例见例14。2
二、基本Swing组件
1  JComponent组件
JComponent类是所有Swing轻量组件的基类 
JComponent类包含的常用方法如下:
1)getX()、getY():返回组件所在的位置。
2)getHeight()、getWidth():返回组件的高度和宽度。
3)setBorder(Border border):设置组件的边框。
4)setFont(Font font):设置字体。
5)setMaximumSize(Dimension maximumSize)、setMinimumSize(Dimension Minimum-Size):设置最大、最小尺寸。


2  JLabel组件 
标签用JLabel类表示 
JLabel的构造方法有以下6种:
1)JLabel():创建一个没有图标,标题为空字符串的标签。
2)JLabel(Icon image):创建一个包含特定图标的标签。
3)JLabel(Icon image, int horizontalAlignment):创建包含特定图标、以特定方式对齐的标签。
4)JLabel(String text):创建包含特定文本的标签。
5)JLabel(String text, int horizontalAlignment):创建包含特定文本、以特定方式对齐的标签。
6)JLabel(String text, Icon image, int horizontalAlignment):创建包含特定文本和图标、以特定方式对齐的标签。


3  JButton组件 
JButton的构造方法有:
1)JButton():创建一个“空”按钮。
2)JButton(Action a):使用一个动作创建按钮。
3)JButton(Icon image)、JButton(String text)、JButton(String text, Icon image):使用图标或\和文本创建按钮。


常用方法。
1)addActionListener(ActionListener l)、addChangeListener(ChangeListener l)、addItemListener(ItemListener l):添加相应的监听器。
2)doClick()、doClick(int pressTime):程序方式单击按钮。
3)setRolloverIcon(Icon image):设置鼠标悬停时的图标。
4)getModel():得到按钮的状态。
见例14。4 例14。5
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;//javax中,javax.swing.event.*

public class TestSwing3 extends JApplet{
	JButton button=new JButton("button");
	/*J*/Icon icon=new ImageIcon("icon.gif");

	public TestSwing3(){
		Container contentPane=getContentPane();

		button.setRolloverIcon(new ImageIcon("punch.gif"));
		button.setIcon(new ImageIcon("open_hand.gif"));

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

		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.out.println("action!");
			}
		}
		);

		button.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent e){
				System.out.println(getButtonState());
			}
		}
		);
	}

	private String getButtonState(){
		ButtonModel model=button.getModel();//button的getModel()方法
		String state="Button State:	";

		state+=model.isSelected() ? "selected":"deselected";
		state += model.isPressed() ? ", pressed" : ", not pressed";
		state += model.isArmed() ? ", armed" : ", disarmed";
		state += model.isRollover() ? ", rollover" : ", not rollover";//java中也有 :?运算符

		return state;
	}
}


This is a JApplet for javax.Swing.


4  JToggleButton组件、JCheckBox组件和JRadioButton组件 
见例14。6
5  菜单和工具条
Swing提供菜单组件(即菜单条中的菜单和弹出式菜单中的菜单)和菜单项组件(包括复选框和单选按钮菜单项) 
Swing还提供一个工具条组件,根据工具条的方向,工具条组件包含一行按钮或一列按钮 

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

public class TestSwing4 extends JApplet {
	public TestSwing4() {
		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();//Box??

		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);
	}
}


(1)JMenuBar组件  JMenuBar是Swing中的菜单条组件,它是菜单的容器,可以通过add方法将JMenu实例添加进去 
JMenuBar的常用方法有:
1)add(JMenu c):添加菜单。
2)getMenuCount():得到菜单条中的菜单个数。
3)getMenu(int index):得到指定序号的菜单。
(2)JMenu组件  JMenu是菜单组件,用来容纳各种菜单项组件 
JMenu的构造方法有:
1)JMenu():创建一个空菜单。
2)JMenu(String s):创建菜单并指定菜单名称。 
JMenu的常用方法有:
1)add(Component c):添加一个组件对象。
2)add(JMenuItem menuItem):添加一个菜单项。
3)addMenuListener(MenuListener l):为菜单事件添加监听器。
4)addSeparator():添加菜单分割线。
5)insert(JMenuItem mi, int pos):在指定位置添加菜单项。
(3)JMenuItem组件、JCheckBoxMenuItem组件和JRadioButtonMenuItem组件  这三个组件都是菜单项组件 

见例14。7 

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

public class TestSwing5 extends JApplet {
	public void init() {
		Container contentPane = getContentPane();
		Icon newIcon = new ImageIcon("new.gif", "Create a new document");
		Icon openIcon = new ImageIcon("open.gif","Open an existing document");

		JMenuBar mb = new JMenuBar();
		JMenu fileMenu = new JMenu("File");

		JMenuItem newItem = new JMenuItem(newIcon);
		JMenuItem openItem = new JMenuItem("Open ...", openIcon);
		JMenuItem saveItem = new JMenuItem("Save");
		JMenuItem saveAsItem = new JMenuItem("Save As ...");
		JMenuItem exitItem = new JMenuItem("Exit", 'x');

		fileMenu.add(newItem);
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(saveAsItem);
		fileMenu.addSeparator();
		fileMenu.add(exitItem);

		MenuItemListener listener = new MenuItemListener(this);//自定义MenuItem的Listener

		newItem.addActionListener(listener);
		openItem.addActionListener(listener);
		saveItem.addActionListener(listener);
		saveAsItem.addActionListener(listener);

		exitItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		mb.add(fileMenu);
		setJMenuBar(mb);
	}
}
class MenuItemListener implements ActionListener {
	private JApplet applet;

	public MenuItemListener(JApplet applet) {
		this.applet = applet;//this
	}
	public void actionPerformed(ActionEvent e) {
		JMenuItem item = (JMenuItem)e.getSource();
		ImageIcon icon = (ImageIcon)item.getIcon();

		if(icon != null)
			System.out.println(icon.getDescription());
		else
			System.out.println(item.getText());
	}
}


(4)JToolBar组件  工具条是一种常用组件的容器 
JToolBar的构造方法有:
JToolBar()
JToolBar(int orientation)
JToolBar(String name)
JToolBar(String name, int orientation),其中,name指定工具条的名称,orientation指定工具条的停靠位置。 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestSwing6 extends JApplet {
	public TestSwing6() {
		Container contentPane = getContentPane();
		JToolBar tb = new JToolBar();
		JComboBox fontCombo = new JComboBox(),
					fontSizeCombo = new JComboBox();//逗号表达式,同一时刻建立多个组合框

		JButton newButton = new JButton(new ImageIcon("new.gif")),
			openButton = new JButton(new ImageIcon("open.gif")),
			cutButton = new JButton(new ImageIcon("cut.gif")),
			copyButton = new JButton(new ImageIcon("copy.gif")),
			pasteButton = new JButton(new ImageIcon("paste.gif"));

		fontCombo.addItem("Helvetica");//字体组合框添加项
		fontCombo.addItem("Palatino");
		fontCombo.addItem("Courier");
		fontCombo.addItem("Times");
		fontCombo.addItem("Times-Roman");

		fontSizeCombo.addItem("10");
		fontSizeCombo.addItem("12");
		fontSizeCombo.addItem("14");
		fontSizeCombo.addItem("16");
		fontSizeCombo.addItem("18");

		tb.add(newButton);
		tb.add(openButton);

		tb.addSeparator();

		tb.add(cutButton);
		tb.add(copyButton);
		tb.add(pasteButton);

		tb.addSeparator();

		tb.add(fontCombo);
		tb.add(fontSizeCombo);

		contentPane.setLayout(new BorderLayout());
		contentPane.add(tb, BorderLayout.NORTH);
	}
}



三、高级Swing组件
1  JProgressBar组件 
2  JSlider组件 
3  JScrollBar组件 
4  JTextCompont组件 
5  JTextField组件 
6  JTextArea组件 

你可能感兴趣的:(Java)