第七节 GUI 图形用户界面

本文详细介绍了Java GUI编程中的Swing组件,包括顶级容器JFrame和JDialog,布局管理器如BorderLayout和GridLayout,以及事件处理机制。此外,还提及了JavaFX作为图形用户界面的新选择,并简要说明了JavaFX项目的创建流程。
摘要由CSDN通过智能技术生成

1. Swing 概述

Java中针对GUI设计提供了基本图形用户接口开发工具,如AWT、Swing、和JavaFX。其中AWT逐渐被Swing取代
Swing组件继承关系:
在这里插入图片描述
Swing组件都继承自Container类,主要有两个分支:容器分支(包括Window窗口和Panel面板)和组件分支。常见顶级容器JApplet、JFrame和JDialog,常用的组件类有按钮组件,和JTextComponent类及其子类。

2. 顶级容器

2.1 JFrame容器

它是一个顶级容器,用来放其他组件和容器的,它不能放在别的容器内。
使用方法如下:

public class JFrameDemo {
   
    public static void main(String[] args) {
   
        //使用SwingUtilities工具类调用createAndShowGUI()方法显示GUI程序
        /**
         * SwingUtilities里面的invokeLater()方法可以开启一个新的线程来显示窗口
         */
        SwingUtilities.invokeLater(JFrameDemo::createAndShowGUI);
    }
    public static void createAndShowGUI(){
   
        //创建并设置JFrame容器窗口
        JFrame frame=new JFrame("JFrame顶级窗口");
        //设置关闭窗口时的默认操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口尺寸
        frame.setSize(250,150);
        //展示JFrame容器窗口
        frame.setVisible(true);
    }
}

2.2 JDialog容器

通常用来表示对话框窗口,可以分为两种:模态和非模态,如果处于模态,我们需要先区处理完这个模态窗口才能继续去和其他窗口进行交互,如果是非模态,那么我们可以继续和其他窗口进行交互。通过setModal(boolean mode)方法可以进行模态和非模态的设置。
创建JDialog的三种构造方法:

方法声明 功能描述
JDialog(Frame owner) 构造方法,用来创建一个非模态的对话框,owner为对话框所有者(顶级窗口JFrame)
JDialog(Frame owner,String title) 构造方法,创建一个具有指定标题的非模态对话框
JDialog(Frame owner,boolean modal) 创建一个有指定模式的无标题对话框

使用如下:

public class JDialogDemo {
   
    public static void main(String[] args) {
   
        SwingUtilities.invokeLater(JDialogDemo::createAndShowGUI);
    }
    private static void createAndShowGUI(){
   
        //创建顶级容器
        JFrame jFrame=new JFrame("顶级窗口");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setSize(340,150);
        jFrame.setVisible(true);
        JDialog dialog=new JDialog(jFrame,"JDialog对话框");
        dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        dialog.setSize(200,100);
        dialog.setVisible(true);
    }
}

3. 布局管理器

Swing 工具提供了8中布局管理器,分别为BorderLayout(边界布局管理器)、BoxLayout(箱式布局管理器)、CardLayout(卡片布局管理器)、FlowLayout(流式布局管理器)、GridBagLayout(网格包布局管理器)、GridLayout(网格布局管理器)、GroupLayout(分组布局管理器)和SpringLayout(弹性布局管理器)

3.1 BorderLayout(边界布局管理器)

它将容器划分为五个部分,分别是页头(PAGE_START)、页尾(PAGE_END)、行首(LINE_START)、行尾(LINE_END)、中部(CENTER)
使用如下:

public class BorderLayoutDemo {
   
    private static void createAndShowGUI(){
   
        JFrame jframe=new JFrame("顶级窗口");
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setSize(300,400);
        jframe.setLayout(new BorderLayout());
        Button btn1=new Button("PAGE_START");
        Button btn2=new Button("PAGE_END");
        Button btn3=new Button("LINE_START");
        Button btn4=new Button("LINE_END");
        Button btn5=new Button("CENTER");
        jframe.add(btn1,BorderLayout.PAGE_START);
        jframe.add(btn2,BorderLayout.PAGE_END);
        jframe.add(btn3,BorderLayout.LINE_START);
        jframe.add(btn4,BorderLayout.LINE_END);
        jframe.add(btn5,BorderLayout.CENTER);
        jframe.setVisible(true);
    }

    public static void main(String[] args) {
   
        SwingUtilities.invokeLater(BorderLayoutDemo::createAndShowGUI);
    }
}

效果如下图:
在这里插入图片描述
注意:如果添加的时候不指明放到那个区域,那么就会默认放在CENTER区域,如果多个都没指明,后面的会覆盖掉前面的。

3.2 FlowLayout(流式布局管理器)

容器会将组件按照添加顺序从左向右放置,当达到容器的边界时,会自动将组件放到下一行的开始位置。组件可以按照左对齐,居中对齐(默认)或右对齐的方式排列。
FlowLayout构造方法:

方法声明 功能描述
FlowLayout() 组件默认居中对齐,水平、垂直间距默认为5个单位
FlowLayout(int align) 指定组件相对于容器的对齐方式,水平、垂直默认为5个单位
FlowLayout(int align, int hgap,int vgap) 指定组件的对齐方式和水平、垂直间距

对于对齐方式,FlowLayout.LEFT表示左对齐、FlowLayout.CENTER表示居中对齐、FlowLayout.RIGHT表示右对齐。
例如:如下使用

public class FlowLayoutDemo {
   
    private static void createAndShowGUI(){
   
        //创建顶级容器
        JFrame jFrame=new JFrame("顶级容器");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setSize(300,400);
        jFrame.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
        jFrame.setLocation(300,200);
        jFrame.add(new Button("btn1"));
        jFrame.add(new Button("btn2"));
        jFrame.add(new Button("btn3"));
        jFrame.add(new Button("btn4"));
        jFrame.add(new Button("btn5"));
        jFrame.setVisible(true);
    }

    public static void main(String[] args) {
   
        SwingUtilities.invokeLater(FlowLayoutDemo::createAndShowGUI);
    }
}

效果如下:
在这里插入图片描述

3.3 GridLayout (网格布局管理器)

使用纵横线将容器分为n行m列大小相等的网格,组件自动占据网格的整个部分,从左到右放置组件。
GridLayout构造方法:

方法声明 功能描述
GridLayout() 默认只有一行,每个组件占一列
GridLayout(int rows,int cols) 指定容器的行数和列数
GridLayout(int rows,int cols,int hgap,intvgap) 指定容器的行数和列数以及组件之间的水平、垂直间距

使用示例如下:

public class GridLayoutDemo {
   
    private static void createAndShowGUI(){
   
        JFrame f=new JFrame("GridLayout");
        f.setSize(400,300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocation(300,500);
        f.setLayout(new GridLayout(3,3));
        for (int i=1;i<9;i++){
   
            Button btn=new Button("btn"+i);
            f.add(btn);
        }
        f.setVisible
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值