Swing初识
参考资料:
[1]王鹏,何昀峰.JavaSwing图形界面开发与案例详解[M].北京:清华大学出版社,2008:407.
文章目录
1. 什么是Java Swing
- Swing 是一个为Java设计的GUI工具包。
- Swing是JAVA基础类的一部分。
- Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
- Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。
2. Java Swing的结构
在javax.swing包中Swing类型一共有三种:顶层组件,中间组件,基本组件
- 顶层组件:JFrame,JApplet,JDialog,JWindow
他是可以独立显示的组件,是一种Window组件
- 中间容器类:JPanel,JScrollPane,JSplitPane,JToolBar
充当载体不能独立显示的组件。
- 特殊中间容器类:JInternalFrame,JLayeredPane,JRootPane
具有特殊功能的载体
- 基本组件类:JButton,JComboBox,JList,JMenu,JSlider,JTextField
依托在中间容器上才能显示的组件,不能独立存在
3. Java Swing HelloWorld
public class HelloWorld extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
HelloWorld frame = new HelloWorld();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public HelloWorld() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
//创建一个中间容器面板JPanel
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new FlowLayout());
setContentPane(contentPane);
//添加一个按钮
JButton jButton = new JButton("这是一个按钮");
contentPane.add(jButton);
}
}
运行结果:
4. 使用IDE开发Java Swing
开发工具可以选择:
- Eclipse
- IDEA
5. Eclipse可视化开发插件WindowBuilder
WindowBuilder是一个Eclipse的可视化开发插件,它支持像Csharp一样使用拖拽方式开发GUI应用。
安装方式:
搜索WindowBuilder然后安装即可
安装完成:
右键 -> new -> Other -> 新建一个JFrame
创建完成:
6. Java Swing的组件基础
6.1 Window类
-
JFrame:用于设计类似于Windows系统中窗口的应用程序
-
JDialog:用于设计对话框
-
JApplet:用于设计嵌入网页的小程序
顶层容器是所有组件的载体,是其能显示的必须的基础,每一个顶层容器同时包含有一个菜单组件和一个内容面板,以JFrame为例:
6.2 JComponet类
Swing组件不能直接添加到顶层容器中,他必须添加到一个与顶层容器相关联的面板中,也就是一个中间容器中。
6.2.1 JComponent类的子类
子类名称 | 说明 |
---|---|
JButton | 按钮 |
JTree | 树 |
JComboBox | 下拉选 |
JCheckBox | 多选框 |
JFileChooser | 文件选择器 |
JInternalFrame | 内部窗体 |
JLabel | 文本标签 |
JMenu | 菜单 |
JMenuBar | 菜单条 |
JPanel | 面板 |
JPasswordField | 密码框 |
JPopupMenu | 弹出式菜单 |
JProgressBar | 进度条 |
JScrollBar | 滚动条 |
JTextArea | 文本域 |
JTable | 表格 |
JSplitPane | 拆分窗格 |
JToolTip | 工具提示 |
JToolBar | 工具条 |
JTexPane | 文本窗格 |
JRadioButton | 单选框 |
JScrollPane | 滚动窗格 |
JSlider | 滚动条 |
6.2.2 JComponent的主要功能特性
例子:
- 工具提示:
public class Demo extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Demo frame = new Demo();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Demo() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JButton button = new JButton("这是一个按钮");
button.setToolTipText("这是按钮1..."); //设置提示
contentPane.add(button);
}
}
运行效果:
当把鼠标移动到按钮旁边时,会显示提示