【JAVA语言】Java Swing GUI开发学习

Hello World(创建空白窗口)

代码

package com.edu.wuaa;

import javax.swing.*;

/**
 *  2020年5月27日
 *  程序功能:产生一个无内容窗口,设定标题、退出后的操作、窗口大小、显示居中、窗口可视
 *  编写目的:学习基于Swing库的 GUI编写
 */

public class HelloFrame extends JFrame{
    public HelloFrame(){
        // 设置标题
        super("Hello World");
        // 设置用户点击关闭的操作
        // EXIT_ON_CLOSE: 使用System.exit()方法退出程序
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);
        // 让窗口在屏幕上居中显示
        setLocationRelativeTo(null);
        // 窗口可视,不设置则不显示窗口,程序直接结束。
        setVisible(true);
    }

    public static void main(String[] args) {
        HelloFrame frame = new HelloFrame();
    }
}

运行结果

在这里插入图片描述
关闭窗口后程序结束

创建 Swing components

此处使用了JLabel, JTextField, JButton。都是以J开头

代码

package com.edu.wuaa;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 2020年5月27日
 * 程序功能:
 * 编写目的:学习 Java Swing GUI component使用
 */
public class Frame extends JFrame {
    public static void main(String[] args) {
        Frame frame = new Frame();
    }
    public Frame() {
        // 设置标题
        super("An Attempt to Learn Swing Component");
        // 设置窗口大小
        setSize(500, 500);
        // 窗口屏幕居中
        setLocationRelativeTo(null);
        initComponents();
        // 不使用布局,直接设置components相对于窗口边界的绝对位置
        // components的位置不会随窗口尺寸改变而改变
        setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private void initComponents() {
        // 设置用于显示字符串 "username" 的 JLabel
        JLabel yournameLabel = new JLabel("name");
        /* 也可以这样写:
         JLabel yournameLabel = new JLabel();
         yournameLabel.setText("username"); */
        // 设置Label的位置和尺寸
        yournameLabel.setBounds(40, 20, 100, 30);
        // 将Label加入到容器(Frame)中
        add(yournameLabel);

        // 设置用户名的输入框 nameTextField
        JTextField nameTextField = new JTextField();
        nameTextField.setBounds(160, 20, 100, 30);
        add(nameTextField);

        // 设置Accept按钮位置
        JButton acceptButton = new JButton("Accept");
        acceptButton.setBounds(100, 70, 100, 30);
        add(acceptButton);
        // 设置一个 JPanel,并在上面设置一个显示 Hello,{username} 的JLabel

        // 设置用于显示 Hello,{username} 的JLabel,(按钮点击后才显示)
        JLabel helloTextLabel = new JLabel();
        helloTextLabel.setBounds(50, 200, 100, 30);
        // 设置水平居中对齐、垂直居中对齐,然而并没有产生效果
//        helloTextLabel.setHorizontalAlignment(SwingConstants.CENTER);
//        helloTextLabel.setVerticalAlignment(SwingConstants.CENTER);
        add(helloTextLabel);
        // 设置用户点击Accept按钮的监视器和响应逻辑
        // 此处使用了 lambda表达式
        acceptButton.addActionListener(e -> {
            String helloText = "Hello";
            String name = nameTextField.getText();
            if (name != null && name.trim().length() > 0) {
                helloText += String.format(", %s", name);
            }
            helloTextLabel.setText(helloText);
        });
        // 也可以这么写,不用lambda表达式
//        acceptButton.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                String helloText = "Hello";
//                String name = nameTextField.getText();
//                // trim() 删去字符串的开头和结尾空白符(包括空格在内的ascii值 <= 0x20 的任何字符)
//                if (name != null && name.trim().length() > 0){
//                    helloText += String.format(", %s", name);
//                }
//                helloTextLabel.setText(helloText);
//            }
//        });
    }
}

运行结果

点击按钮之前:
在这里插入图片描述
不输入name,点击按钮:
不输入名字只有Hello
输入name,并点击按钮:
显示不全,问题不大

有个问题就是,上面代码中的57,58行用于设定水平对齐和垂直对齐的代码没有效果。于是下面做了一个小测试

测试两个Alignment方法

测试两种情况下 setVerticalAlignment()setHorizonAlignment()是否奏效:

  1. 不设置Panel和Layout (测试结果:无效)
  2. 创建Panel并设置其Layout为BorderLayout(有效)

代码

import javax.swing.*;
import java.awt.*;

/**
 * 2020年5月27日
 * 程序功能:创建打印Hello的窗口(两种)
 * 编写目的:
 * 测试 setHorizonAlignment() 和 setVerticalAlignment()
 * 在无Panel,窗口无Layout和有Panel,Panel有Layout时的表现
 */
public class Frame extends JFrame {
    public static void main(String[] args) {
        // 以下两行注释其中一个
//        Frame frame = new Frame(false);
        Frame frame = new Frame(true);
    }

    Frame(boolean isLayoutPresent){
        super("Test");
        setLocationRelativeTo(null);
        setSize(300, 300);
        if (!isLayoutPresent){
            setLayout(null);
        }
        initComponents(isLayoutPresent);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    private void initComponents(boolean isLayoutPresent) {
        JLabel helloTextLabel = new JLabel("Hello!");
        helloTextLabel.setBounds(50, 50, 100, 30);
        if (!isLayoutPresent){
            add(helloTextLabel);
            // 以下两行代码并不起作用
            helloTextLabel.setVerticalAlignment(SwingConstants.CENTER);
            helloTextLabel.setHorizontalAlignment(SwingConstants.CENTER);
        }
        if (isLayoutPresent) {
            JPanel helloPanel = new JPanel();
            helloPanel.setBounds(40, 150, 220, 70);
            helloPanel.setLayout(new BorderLayout());
            helloPanel.setBackground(Color.GREEN);
            add(helloPanel);

            helloTextLabel.setVerticalAlignment(SwingConstants.CENTER);
            helloTextLabel.setHorizontalAlignment(SwingConstants.CENTER);
            helloPanel.add(helloTextLabel);
        }
    }
}

运行结果

  1. 无Panel和Layout时:

Alignment的设置并不起作用
此时以下两行代码无效
helloTextLabel.setVerticalAlignment(SwingConstants.CENTER); helloTextLabel.setHorizontalAlignment(SwingConstants.CENTER);

  1. 有Panel,Panel为BorderLayout时:

在这里插入图片描述
此时以下两行代码有效
helloTextLabel.setVerticalAlignment(SwingConstants.CENTER); helloTextLabel.setHorizontalAlignment(SwingConstants.CENTER);

参考

JetBrains Academy(Hyperskill)

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值