【Java杂记】GUI技术:Swing基本使用及JFormDesigner插件安装使用

3,282 阅读7分钟

  早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看到历史的足迹。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件、操作系统、应用软件一条龙的产品,与其它PC不兼容。这使得Apple公司错过了一次一统全球PC的好机会。   后来,Microsoft公司推出了风靡全球的Windows操作系统,它凭借着优秀的图形化用户界面,一举奠定了操作系统标准的地位。这也造就了世界首富---比尔.盖茨和IT业的泰山北斗微软公司。   在这图形用户界面风行于世的今天,一个应用软件没有良好的GUI是无法让用户接受的。而Java语言也深知这一点的重要性,它提供了一套可以轻松构建GUI的工具

GUI开发包

  • java.awt 包: 主要提供字体/布局管理器
  • javax.swing 包:主要提供各种组件(窗口/按钮/文本框),商业开发常用
  • java.awt.event 包:事件处理,后台功能的实现

1.Swing 组件

相对于AWT而言Swing包中提供了更多的丰富的、快捷的、强大的GUI组件,而且这些组件都是java语言编写而成,因此Swing不依赖本地平台,可以真正做到跨平台运行。通常而言我们把AWT称之为重量级组件,Swing称之为轻量级软件,一般而言Swing组件都是在AWT组件名称前加J。

如图所示:swing组件主要可分为三个部分 在这里插入图片描述 下面就选这些组件中比较常用的进行介绍...

1.1 顶层容器(窗口)

常用的有JFrame,JDialog。

组件描述
1JFrame一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器)
2JDialog对话框

1.2 中间容器(面板)

JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。

组件描述
1JPanel (相当于div)一般轻量级面板容器组件(作为JFrame中间容器)
2JScrollPane带滚动条的,可以水平和垂直滚动的面板组件
3JSplitPane分隔面板
4JTabbedPane选项卡面板
5JLayeredPane层级面板

1.3 基本组件(按钮,标签等)

JLabel,JButton,JTextField,JPasswordField,JRadioButton 等。

组件描述
1JLabel标签
2JButton按钮
3JRadioButton单选按钮
4JCheckBox复选框
5JToggleButton开关按钮
6JTextField文本框
7JPasswordField密码框
8JTextArea文本区域
9JComboBox下拉列表框
10JList列表
11JProgressBar进度条
12JSlider滑块

2.Swing API

现在已经知道了 Swing 中有哪些基本组件,那我们如何编写代码实操呢?下面就介绍一下 Swing 中部分常用组件的Java api...

2.1 Jframe组件

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();显示窗口

2.2 Panel组件

  • Jpanel
JPanel panel = new JPanel(); // 创建面板容器
panel.add(button); // 添加按钮到面板
  • JScrollPane
JScrollPane scrollPane = new JScrollPane(); // 创建可滚动面板
scrollPane.setViewportView(textArea); // 设置面板内容
  • JOptionPane
// 弹出提示框到panel容器
JOptionPane.showMessageDialog(panel3, "没有选中任何文件", "提示", JOptionPane.WARNING_MESSAGE);

2.3 功能组件

  • JLabel:即要显示的文字
JLabel label = new JLabel("Hello World"); // 添加标签
  • Jbutton:一般需要添加监听事件ActionEvent,提交后跳转到指定方法
JButton button = new JButton("选择文件"); // 创建按钮
button.addActionListener(new ActionListener() {} // 添加操作按钮后的事件监听器
  • JTextArea:与TextFiled和passwordFiled类似,主要是get与set
JTextArea textArea = new JTextArea(); // 创建文本区域
String text = textArea.getText(); // 获取输入的内容
textArea.setText(content); // 设置内容
  • JFileChooser
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); // 设置文件对话框
jfc.showSaveDialog(frmIpa); // 显示打开的文件对话框
jfc.getSelectedFile(); // 获取选择器选择的文件

Layout布局

无论上面哪种组件,都可以设置布局,比如 frame.setLayout(new BorderLayOut()) 或者 panel.setLayout(new FlowLayout()) 再或是 button.setLayout(GridLayout)。常用布局如下:

所属类包布局管理器名称说明
Java.awtBorderLayout(边界布局)容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。
Java.awtGridLayout(网格布局容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。其中col与row可以手动设置
Java.awtFlowLayout(流式布局)组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列
Java.awtGridBagLayout(网格包布局)GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格
Java.awtCardLayout(卡片布局)如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况
Java.swingBoxLayout(箱式布局)允许在容器中纵向或者横向防止多个控件
Java.swingSprigLayout(弹簧布局)根据一组约束条件放置控件
空布局不使用布局管理器,按照控件自身提供的大小、位置信息放置控件

3.Swing 示例

下面通过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);
    }

}

4.JFormDesigner插件

JFormDesigner插件提供了GUI编程可视化与代码自动生成

4.1 安装

这里放一个我的云盘链接:链接:pan.baidu.com/s/1axTxq5Lv… 提取码:8ofg。具体安装过程我就不写了,放两个参考链接吧:参考链接1参考链接2

4.2 使用

一个示例:设计登录页面。博主试了,内容没问题,在使用过程中有几点注意:

在这里插入图片描述

  • 组件的大小不固定,但是不能手动设置,只能通过frame / panel的组件间距进行设置

    • frame --》Layout Manger
      • horizontal gap :窗口内面板横间距
      • vertical gap:窗口内面板纵间距
    • panel --》Layout Manger
      • horizontal gap :面板内组件横间距
      • vertical gap:面板内组件纵间距
    • 组件 --》Properties
      • horizontalAlign:设置对齐方式
  • 显示效果可以预览

    • frame --》Properties

      • title:标题

      • minimumSize:预览大小(高度,宽度)

        注:若不再额外设置setBound,就默认使用改值

  • 编码注意

    • 要在构造函数手动设置
      • setVistalbe(true),要放在函数最后
      • setDefaultCloseOperation(DISPOSE_ON_CLOSE),设置前台关闭后程序结束
      • setBounds(500,500,450,450),设置大小与显示位置
    • 监听事件
      • 在登录按钮添加监听事件
      • 在监听事件方法内调用TextField的getText与setText方法进行操作