java - 如何在 Java Swing 中创建一个 hello world?我的代码有什么问题?

标签 java swing

我正在学习 Java Swing,我对以下简单代码有一些疑问:

package com.techub.exeute;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;


public class Main{

    public static void main(String[] args) {

        JFrame frame = new JFrame("FrameDemo");
        frame.setMinimumSize(new Dimension(800, 400));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       

        JLabel myLabel = new JLabel("Hello World !!!", SwingConstants.CENTER);
        myLabel.setFont(new Font("Serif", Font.BOLD, 22));
        myLabel.setBackground(Color.blue);
        myLabel.setOpaque(true);
        myLabel.setPreferredSize(new Dimension(100, 80));

        frame.getContentPane().add(myLabel, BorderLayout.NORTH);

    }
}

我的想法是创建一个 JFrame 对象并向其中插入一个 Hello World JLabel 对象并设置一些属性。

我在 ma​​in() 方法中执行它。问题是当我执行程序时我什么也没看到!!!为什么?我的代码有什么问题?

谢谢

安德里亚

最佳答案

您正在创建框架但没有显示它。打电话

frame.setVisible(true);

显示它。

另一件事:你不应该在主线程中操作 GUI 组件。相反,创建一个用于创建框架和设置组件的新方法,并在事件调度线程中运行该方法,如 the example from the official tutorial :

import javax.swing.*;        

public class HelloWorldSwing {
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

关于java - 如何在 Java Swing 中创建一个 hello world?我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18978337/

相关文章:

java - 在 Spring Webflux 中返回 201 具有特定主体的创建状态

java - SWT 窗口可在 Linux 上运行,但不能在 Mac 上运行

java - 使用 j2html 的登录表单示例

java - 有没有一种方法可以使System.lineSeparator()在JLabel字符串中工作?

java - 动态添加按钮到 JFrame 或 LayeredPane

java - 无法在 JTable 中使用 DefaultTableModel

java - Jackson ObjectMapper 给出了递归数据类型的错误

Java匹配正则表达式,然后使用第二个正则表达式格式化字符串

Java 终端仅打印第一个命令的输出

java - 为什么在我将 JComboBox 添加到其中一个 JPanel 中后,所有 JPanel 都没有呈现