赞
踩
早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看到历史的足迹。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件、操作系统、应用软件一条龙的产品,与其它PC不兼容。这使得Apple公司错过了一次一统全球PC的好机会。
后来,Microsoft公司推出了风靡全球的Windows操作系统,它凭借着优秀的图形化用户界面,一举奠定了操作系统标准的地位。这也造就了世界首富—比尔.盖茨和IT业的泰山北斗微软公司。
在这图形用户界面风行于世的今天,一个应用软件没有良好的GUI是无法让用户接受的。而Java语言也深知这一点的重要性,它提供了一套可以轻松构建GUI的工具
GUI开发包:
相对于AWT而言Swing包中提供了更多的丰富的、快捷的、强大的GUI组件,而且这些组件都是java语言编写而成,因此Swing不依赖本地平台,可以真正做到跨平台运行。通常而言我们把AWT称之为重量级组件,Swing称之为轻量级软件,一般而言Swing组件都是在AWT组件名称前加J。
如图所示:swing组件主要可分为三个部分
下面就选这些组件中比较常用的进行介绍…
常用的有JFrame,JDialog。
组件 | 描述 | |
---|---|---|
1 | JFrame | 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器) |
2 | JDialog | 对话框 |
JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。
组件 | 描述 | |
---|---|---|
1 | JPanel (相当于div) | 一般轻量级面板容器组件(作为JFrame中间容器) |
2 | JScrollPane | 带滚动条的,可以水平和垂直滚动的面板组件 |
3 | JSplitPane | 分隔面板 |
4 | JTabbedPane | 选项卡面板 |
5 | JLayeredPane | 层级面板 |
JLabel,JButton,JTextField,JPasswordField,JRadioButton 等。
组件 | 描述 | |
---|---|---|
1 | JLabel | 标签 |
2 | JButton | 按钮 |
3 | JRadioButton | 单选按钮 |
4 | JCheckBox | 复选框 |
5 | JToggleButton | 开关按钮 |
6 | JTextField | 文本框 |
7 | JPasswordField | 密码框 |
8 | JTextArea | 文本区域 |
9 | JComboBox | 下拉列表框 |
10 | JList | 列表 |
11 | JProgressBar | 进度条 |
12 | JSlider | 滑块 |
现在已经知道了 Swing 中有哪些基本组件,那我们如何编写代码实操呢?下面就介绍一下 Swing 中部分常用组件的Java api…
JFrame frame = new JFrame(“HelloWorldSwing”); | 创建及设置窗口 |
---|---|
frame.setBounds(600, 300, 500, 400); | 设置窗口的x,y位置,窗口大小x,y. |
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | 设置默认的关闭窗口 |
frame.add(panel) | 添加panel面板到容器 |
frame.getContentPane().add(panel, BorderLayout.NORTH); | 添加面板到主窗口,布局在北面 |
flame.getContentPane().add(scrollPane, BorderLayout.CENTER); | 添加可滚动面板到主窗口,布局在中间 |
frame.setVisible(true); | 这个最好放在最后,不然视图会看不到 |
frame.setDefaultLookAndFeelDecorated(true); | 确保一个漂亮的外观风格 |
frame.pack(); | 显示窗口 |
JPanel panel = new JPanel(); // 创建面板容器
panel.add(button); // 添加按钮到面板
JScrollPane scrollPane = new JScrollPane(); // 创建可滚动面板
scrollPane.setViewportView(textArea); // 设置面板内容
// 弹出提示框到panel容器
JOptionPane.showMessageDialog(panel3, "没有选中任何文件", "提示", JOptionPane.WARNING_MESSAGE);
JLabel label = new JLabel("Hello World"); // 添加标签
label.setFont(new Font("宋体“, Font.Bold, 20)); // 设置label的字体
JButton button = new JButton("选择文件"); // 创建按钮
button.addActionListener(new ActionListener() {} // 添加操作按钮后的事件监听器
JTextArea textArea = new JTextArea(); // 创建文本区域
String text = textArea.getText(); // 获取输入的内容
textArea.setText(content); // 设置内容
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); // 设置文件对话框
jfc.showSaveDialog(frmIpa); // 显示打开的文件对话框
jfc.getSelectedFile(); // 获取选择器选择的文件
无论上面哪种组件,都可以设置布局,比如 frame.setLayout(new BorderLayOut())
或者 panel.setLayout(new FlowLayout())
再或是 button.setLayout(GridLayout)
。常用布局如下:
所属类包 | 布局管理器名称 | 说明 |
---|---|---|
Java.awt | BorderLayout(边界布局) | 容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。 |
Java.awt | GridLayout(网格布局 | 容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。其中col与row可以手动设置 |
Java.awt | FlowLayout(流式布局) | 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 |
Java.awt | GridBagLayout(网格包布局) | GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格 |
Java.awt | CardLayout(卡片布局) | 如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况 |
Java.swing | BoxLayout(箱式布局) | 允许在容器中纵向或者横向防止多个控件 |
Java.swing | SprigLayout(弹簧布局) | 根据一组约束条件放置控件 |
无 | 空布局 | 不使用布局管理器,按照控件自身提供的大小、位置信息放置控件 |
下面通过swing 创建一个窗口,然后添加3个按钮。效果如下
public class Test {
public static void main(String[] args) {
// 创建窗口
JFrame jf = new JFrame("测试窗口");
jf.setSize(300, 300); // 设置窗口大小
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 设置默认关闭窗口
// 创建面板,指定布局为null,使用绝对布局
JPanel panel = new JPanel(null);
// 创建按钮1
JButton button01 = new JButton("Button01");
button01.setLocation(50, 50); // 设置按钮坐标
button01.setSize(100, 50); // 设置按钮的宽高
// 将按钮1添加到面板panel中
panel.add(button01);
// 创建按钮2
JButton button02 = new JButton("Button02");
button02.setBounds(50, 100, 100, 50); // 设置按钮的界限(坐标和宽高)
// 将按钮2添加到面板panel中
panel.add(button02);
// 将panel添加到窗口Frame中,并设置为可见
jf.setContentPane(panel);
jf.setVisible(true);
// 创建按钮3
JButton button03 = new JButton("Button03");
// 将按钮设置在内容面板右下角,并且设置宽高为 100,50
button03.setBounds(panel.getWidth() - 100, panel.getHeight() - 50, 100, 50);
// 将按钮3添加到面板panel中
panel.add(button03);
}
}
JFormDesigner插件提供了GUI编程可视化与代码自动生成
这里放一个我的云盘链接:链接:https://pan.baidu.com/s/1axTxq5LvWDWsBI_XW6NIPQ 提取码:8ofg。具体安装过程我就不写了,放两个参考链接吧:参考链接1,参考链接2。
一个示例:设计登录页面。博主试了,内容没问题,在使用过程中有几点注意:
组件的大小不固定,但是不能手动设置,只能通过frame / panel的组件间距进行设置
显示效果可以预览
frame --》Properties
title:标题
minimumSize:预览大小(高度,宽度)
注:若不再额外设置setBound,就默认使用改值
编码注意
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。