Swing
1. GUI
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
Java提供了三个主要包做GUI开发:
- java.awt 包 – 主要提供字体/布局管理器
- javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
- java.awt.event 包 – 事件处理,后台功能的实现。
2. Swing组件
如图所示:swing组件主要可分为三个部分:
- 顶层容器::常用有JFrame,JDialog
- 中间容器:JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。
- 基本组件:JLabel,JButton,JTextField,JPasswordField,JRadioButton 等
3. 顶层容器
# | 组件 | 描述 |
---|---|---|
1 | JFrame | 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器) |
2 | JDialog | 对话框 |
3.1 JFrame类的常用方法
JFrame类的常用方法 | 类型 | 描述 |
---|---|---|
JFrame() | 构造方法 | 创建一个普通的窗体对象 |
JFrame(String a) | 构造方法 | 创建一个窗体对象,并指定标题 |
setSize(int width,int height) | 普通方法 | 设置窗体大小 |
setBackgorund(color.red) | 普通方法 | 设置窗体背景颜色 |
setLocation(int x,int y) | 普通方法 | 设置组件的显示位置 |
setLocation(point p) | 普通方法 | 通过point来设置组件的显示位置 |
setVisible(true/false) | 普通方法 | 显示或隐藏组件 |
add(Component comp) | 普通方法 | 向容器中增加组件 |
setLayout(LayoutManager mgr) | 普通方法 | 设置局部管理器,如果设置为null表示不使用 |
pack() | 普通方法 | 调整窗口大小,以适合其子组件的首选大小和局部 |
getContentpane() | 普通方法 | 返回此窗口的容器对象 |
3.2 JFrame举例
public class MyDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("Swing Example");
// 关闭窗口的时候退出整个程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 窗口大小
frame.setSize(400, 300);
// 显示窗口
frame.setVisible(true);
}
}
4. 中间容器
# | 组件 | 描述 |
---|---|---|
1 | JPanel (相当于div) | 一般轻量级面板容器组件(作为JFrame中间容器) |
2 | JScrollPane | 带滚动条的,可以水平和垂直滚动的面板组件 |
3 | JSplitPane | 分隔面板 |
4 | JTabbedPane | 选项卡面板 |
5 | JLayeredPane | 层级面板 |
4.1 JPanel
定义
JPanel 是 Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),如JButton、JTextArea、JTextField 等,功能是对窗体上的这些控件进行组合。
常用方法
JPanel panel = new JPanel(); // 初始化 创建面板
panel.setBorder(BorderFactory.createTitledBorder("标题"); // 给面板添加边框
panel.setLayout(); // 设置布局
panel.add(); //添加基本组件 例如按钮等。
简单例子
public class MyDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("Swing Example");
// 关闭窗口的时候退出整个程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*
设置容器
*/
JPanel rootPanel = new JPanel();
frame.setContentPane(rootPanel);
/*
添加控件
*/
JButton button = new JButton("测试");
rootPanel.add(button);
// 窗口大小
frame.setSize(400, 300);
// 显示窗口
frame.setVisible(true);
}
}
5. 基本组件
# | 组件 | 描述 |
---|---|---|
1 | JLabel | 标 |
2 | JButton | 按 |
3 | JRadioButton | 单选按钮 |
4 | JCheckBox | 复选框 |
5 | JToggleButton | 开关按钮 |
6 | JTextField | 文本框 |
7 | JPasswordField | 密码框 |
8 | JTextArea | 文本区域 |
9 | JComboBox | 下拉列表框 |
10 | JList | 列表 |
11 | JProgressBar | 进度条 |
12 | JSlider | 滑块 |
5.1 JLabel标签
定义
标签控件,用于显示文本。
例子
JLabel label = new JLabel("JLabel标签");
rootPanel.add(label);
// 简化
rootPanel.add(new JLabel("JLabel标签"));
方法
/*
构造方法
*/
JLabel()// 创建无图像并且其标题为空字符串的 JLabel。
JLabel(Icon image)// 创建具有指定图像的 JLabel 实例。
JLabel(Icon image, int horizontalAlignment)//创建具有指定图像和水平对齐方式的 JLabel 实例。
JLabel(String text)// 创建具有指定文本的 JLabel 实例。
JLabel(String text, Icon icon, int horizontalAlignment)//创建具有指定文本、图像和水平对齐方式的 JLabel 实例。
JLabel(String text, int horizontalAlignment)//创建具有指定文本和水平对齐方式的 JLabel 实例。
/* JLabel中增加图片和文本 */
ImageIcon imageIcon = new ImageIcon("yourFile.gif");
JLabel label = new JLabel("Mixed", imageIcon, SwingConstants.RIGHT);
frame.add(label);
/* JLabel中增加HTML文本 */
JLabel label = new JLabel("<html>bold <br> plain</html>");
frame.add(label);
/*
常用方法
*/
void setText(String text) // 设置文本
void setIcon(Icon icon) // 设置图像
// 设置文本相对于图片的位置(文本默认在图片右边垂直居中)
void setHorizontalTextPosition(int textPosition)
void setVerticalTextPosition(int textPosition)
// 设置标签内容(在标签内)的对其方式(默认左对齐并垂直居中)
void setHorizontalAlignment(int alignment)
void setVerticalAlignment(int alignment)
// 设置文本的字体类型、样式 和 大小
void setFont(Font font)
5.2 JTextField
定义
单行文本框
例子
/* 文本框 */
JTextField textField = new JTextField(20); // 20是设置文本框的长度
rootPanel.add(textField);
方法
/* 构造函数 */
JTextField() //用来创建一个默认的文本框
JTextField(String text) //用来创建指定初始化信息(text)的文本框
JTextField(int columns) //用来创建指定列数(colums)的文本框
JTextField(String text, int columns) //结合上面两个,创建一个既有初始化信息,又指定列数的文本框
/* 设置文本 */
setText(str);
/* 获取文本 */
getText();
/* 设置字体 */
setFont(); // 例如 setFont(new Font("楷体", Font.BOLD, 0x12));
/* 设置文本框的水平对齐方式 */
setHorizontalAlignment() // 例如 setHorizontalAlignment(JTextField.CENTER);
/* 设置文本框的最多显示内容的列数 */
setColumns();
5.3 JCheckBox
定义
复选框
例子
/* 复选框 */
JCheckBox checkBox = new JCheckBox("同意");
rootPanel.add(checkBox);
常用方法
setSelected(true/false) // 设置是否选中
isSelected() // 是否选中
addActionListener() // 勾选或取消选中获取事件
/* 简单例子 */
JCheckBox checkBox = new JCheckBox("同意");
JButton button = new JButton("测试");
checkBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (checkBox.isSelected())
button.setEnabled(true);
else button.setEnabled(false);
}
});
/* 复选框 */
rootPanel.add(checkBox);
JComboBox
定义
下拉列表
例子
方法