java学习笔记14——Java Swing,
分享于 点击 8972 次 点评:35
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;
}
}
<html>
<h2>This is a JApplet for javax.Swing.</h2>
<applet code="TestSwing3" width="450" height="450"></applet>
</html>
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组件
相关文章
- 暂无相关文章
用户点评