• java swing学习


    GUI初步建立

    新建窗口JFrame

    用Swing搭建GUI,首先需要建立窗口。窗口类组件属于顶层容器。像这样新建窗口并初始化:

    // 新建以title为标题的窗口
    JFrame frame = new JFrame(title);
    
    // 设置窗口大小
    frame.setSize(1150, 600);
    
    // 设置默认关闭方式
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

    代码中,JFrame是普通窗口类。绝大多数 swing 图形界面程序都使用JFrame作为顶层容器。

    添加面板JPanel

    有了顶层容器,接下来需要新建中间容器,用以承载、管理具体组件。这里选用普通的轻量级 面板容器组件JPanel

    // 新建面板并设置Layout为null(绝对布局)
    JPanel panel = new JPanel(null);
    
    // 向窗口中添加panel
    frame.add(panel);

    在新建面板的时候,需要指明采用何种布局方式。以我个人愚见,Java swing所提供的布局方式基本都很难用,想做更新和修改也要费很大力气。因此,不如直接采用绝对布局,通过指定各个组件的绝对坐标来布局页面。再加上一些小技巧(如使用变量储存横纵坐标值,以便移动和修改等),绝对布局反而是省心省力的了。其他的布局方式可以参看教程。

    添加基本组件

    接下来,就需要往面板中添加组件。简单起见,我们只使用三种最基本、最常用的组件:

    组件描述功能
    JLabel 标签 展示文字或图片
    JTextField 文本框 编辑单行文本
    JButton 按钮 用户点击时触发特定的事件

    其他的大部分组件都是大同小异的。这三个组件的详细教程在此:标签教程文本框教程按钮教程

    添加标签JLabel

    标签JLabel用于展示文字或图片。刚开始用swing的时候,我花了好些时间寻找如何让文字换行。事实上,不同于某些图文编辑软件中的「文本框」,JLabel是不能让其内容主动换行的,且其中所有内容都应用一个格式。要想实现多行、多格式效果,只能用多个JLabel实现。

    // 新建标签,文字内容为“Add a new person”
    JLabel addPersonLabel = new JLabel("Add a new person");
    
    // 设置位置和大小
    addPersonLabel.setBounds(xCoord, yCoord, 200, 25);
    
    // 设置字体
    addPersonLabel.setFont(functionTitleFont);
    
    // 向面板添加这个JLabel
    panel.add(addPersonLabel);

    添加文本框JTextField

    文本框JTextField用以让用户编辑单行的文本。在本应用中,用户需要输入新结点的名称等。向面板中添加文本框的代码如下:

    // 新建文本框,宽度为20
    JTextField personNameText = new JTextField(20);
    
    // 设置位置和大小
    personNameText.setBounds(70, yCoord, 125, 25);
    
    // 向面板添加这个JTextField
    panel.add(personNameText);

    添加按钮JButton

    按钮JButton在用户点击时触发特定的事件。下面是向面板添加用于新建结点的「Add」按钮的代码:

    // 新建按钮,设置文字为“Add”
    JButton addPersonButton = new JButton("Add");
    
    // 设置位置和大小
    addPersonButton.setBounds(210, yCoord, 80, 25);
    
    // 添加动作监听器,设置点击按钮时要做的事
    addPersonButton.addActionListener(e -> {
        // 获取文本框中的文本字符串,命名为name
        String name = personNameText.getText();
    
        // 若输入为空,忽略此次点击
        if (name.length() > 0) {
    
            // 调用FriendshipGraph类的API,尝试在图中新建名为name的结点
            if (graph.addVertex(name)) {
                // 若新建成功,改变那些显示反馈信息的标签中的文字
                addPersonInfoLabel.setText("Successfully added a person named '" + name + "' !");
                printPersonLabel.setText("Total: " + graph.getVerticesNum() + " People");
            }
            else {
                // 若新建失败,显示错误信息
                addPersonInfoLabel.setText("Error: Cannot add the person.");
            }
            // 清空文本框
            personNameText.setText("");
        }
    });
    // 向面板添加这个JButton
    panel.add(addPersonButton);
    生命中真正重要的不是你遭遇了什么,而是你记住了哪些事,又是如何铭记的。
  • 相关阅读:
    Sign Distance Field 2
    矩阵相乘优化
    Editor GUI 的 Gamma Correction
    GPUSkinning 5
    GPUSkinning 2
    RenderTextureFormat.ShadowMap
    战争迷雾
    Texture2DArray(2)
    软件渲染器 YwSoftRenderer
    将 Unity5.3 的老项目升级到 Unity 2018.3 遇到的些许问题。
  • 原文地址:https://www.cnblogs.com/nbwzyzngyl/p/14974385.html
Copyright © 2020-2023  润新知