1、Swing概述
Swing提供了比AWT更多的图形界面组件,并且Swing采用了MV(模型——视图——控制器)设计模式,Swing优势如下:
-
Swing组件不再依赖于本地平台的GUI,无需采用各种平台的GUI交集,因此Swing提供的图形界面组件远超过AWT组件。
-
Swing不再依赖于本地平台GUI,因此不会产生与平台相关的bug。
-
Swing组件在各种平台上运行时可以保证具有相同的图形界面外观。
-
Swing采用了MVC设计模式
-
Swing在不同的平台上表现一致,并且有能力提供本地平台不支持的显示外观。
2、Swing基本组件的用法
将Swing组件按功能分为7类:
-
顶层容器:JFrame、JApplet、JDialog、JWindow
-
中间容器:JPanel、JScrollPanel、JSplitPanel、JToolBar
-
特殊容器:在用户界面上具有特殊作用的中间容器,比如JInternalFrame、JRootPane、JLayeredPane和JDestopPane
-
基本组件:实现人机交互的组件,比如JButton、JComboBox、JList、JMenu、JSlider
-
不可编辑信息的现实组件:向用户显示不可编辑信息的组件,比如JLabel、JProgressBar和JToolTip
-
可编辑信息的现实组件:向用户显示能被编辑的格式化信息的组件,比如JTable、JTextArea、JTextField
-
特殊对话框组件:可以直接产生特殊对话框的组件,比如JColorChooesr和JFielChooser
使用Swing创建窗口应用
为组件设置边框
可以调用JComponent提供的setBorder(Border b)方法为Swing组件设置边框。
为Swing组件添加边框步骤如下:
-
使用BorderFaactory或者XxxxBorder创建XxxBorder实例
-
调用Swing组件的setBorder(Border b)方法为该组件设置边框
Swing组件的双缓冲和键盘驱动
所有的Swing组件默认启用双缓冲绘图技术
所有的Swing组件都提供了简单的键盘驱动
使用JToolBar创建工具条
Swing提供了JtoolBar类来创建工具条,创建JtoolBar对象时可以指定name和orientaton两个参数
-
name:该参数指定该工具条的名称
-
orientation:该参数指定该工具条的方向
创建JtoolBar对象后,还有如下几个常用方法:
-
JButton add(Action a):通过Action对象为JtoolBar添加对应的工具按钮
-
void addSeparator(Dimension size):向工具条这种添加指定大小的分隔符
-
void setFloatable(boolean b):设置该工具条是否可拖动
-
void setMargin(Insets m):设置工具条边框和工具按钮之间的页边距
-
void setOrientation(int o):设置工具条的方向
-
void setRollover(boolean rollover):设置工具条的rollover状态
使用JOtionPane
JOtionPane提供了4个方法来创建对话框:
-
showMessageDialog/showInternalMessageDialog:消息对话框,告知用户某事已经发生,用户只能单机“确定”按钮
-
showConfirmDialog/showInternalConfirmDialog:确认对话框
-
showInputDialog/showInteralInputDialog:输入对话框
-
showOptionDialog/showInternalDialog:自定义选项对话框
3、Swing中的特殊容器
JSplitPane
JSplitPane用于创建一个分割面板,可以将一个组件分割成两个部分,并提供一个分割条,用户可以拖到分割条来调整两个部分的大小
创建分割条代码:
new JSplitPane(方向,左/上组件,右/下组件);
JTabbedPane
JTabbedPane用来在窗口上放置多个标签页,创建步骤:
-
创建一个JTabbedPane对象,其中两个参数分别为:tabPlacement:该参数指定标签页标题的放置位置;tabLayoutPolicy:指定标签页标题的布局策略。
-
调用JTabbedPane对象的插入、修改、删除方法。
-
如果需要让某个标签页显示出来,则可以通过调用JTabbedPane的setSelectedIndex()方法来实现。
-
程序还可以通过JTabbedPane提供的一系列方法来操作JTabbedPane的相关属性。
-
如果程序需要监听用户标签页的事件,则可以使用ChangeListener监听器来监听JTabbedPane对象。
4、创建进度条
创建进度条
使用JProgressBar创建,步骤如下:
-
创建一个JProgressBar对象,可以指定三个参数,用于设置进度条的排列方向(竖直和水平)、进度条的最大值和最小值。也可以在创建该对象是不传入任何参数,在后买你程序中修改这三个属性。
-
调用该对象的常用方法设置进度条的普通属性。
-
当程序中工作进度改变时,调用JProgressBar对象的setValue()方法,当进度条的完成进度发生改变时,程序还可以调用进度条对象的如下两个方法:
-
double getPercentComplete():返回进度条的完成百分比
-
String getString():返回进度字符串的当前值
-
创建进度对话框
ProggressMonitor可以直接创建一个进度对话框
final ProgressMonitor dialog = new ProgressMonitor(null,"等待任务完成","已完成",0,target.getAmoubt());
5、使用JList、JComboBox创建列表框
简单列表框
使用JList、JComboBox创建列表框的步骤如下:
-
使用JList或者JComboBox的构造器创建一个列表框对象
-
调用JList或者JComboBox的各种方法来设置列表框的外观行为
-
如果需要监听列表框选择项的变化,则添加对应的监听器来实现
6、使用JTree和TreeModel创建树
创建树
直接使用JTree的构造器创建JTree就行,构造器如下:
-
JTree(TreeModel newModel):使用指定的数据模型创建JTree对象,默认显示根节点。
-
JTree(TreeNode root):使用root作为根节点创建JTree对象,默认显示根节点。
-
JTree(TreeNode root,boolean asksAllowsChildren):使用root作为根节点创建JTree对象。
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class JTreeText{
JFrame jf = new JFrame("简单树");
JTree Tree;
DefaultMutableTreeNode root;
DefaultMutableTreeNode guangdong;
DefaultMutableTreeNode guangxi;
DefaultMutableTreeNode foshan;
DefaultMutableTreeNode shantou;
DefaultMutableTreeNode guilin;
DefaultMutableTreeNode nanning;
public void init() {
//依次创建树中的节点
root = new DefaultMutableTreeNode("中国");
guangdong = new DefaultMutableTreeNode("广东");
guangxi = new DefaultMutableTreeNode("广西");
foshan = new DefaultMutableTreeNode("佛山");
shantou = new DefaultMutableTreeNode("汕头");
guilin = new DefaultMutableTreeNode("桂林");
nanning = new DefaultMutableTreeNode("南宁");
//通过add()方法建立树节之间的父子关系
guangdong.add(foshan);
guangdong.add(shanstou);
guangxi.add(guilin);
guangxi.add(nanning);
root.add(guangdong);
root.add(guangxi);
//以根节点创建数
jf.add(new JScrollPane(Tree));
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) {
new JTreeText().init();
}
}