【问题标题】:How to create an hello world in Java Swing? What is wrong in my code?如何在 Java Swing 中创建一个 hello world?我的代码有什么问题?
【发布时间】:2013-09-24 09:55:27
【问题描述】:

我正在学习 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() 方法中执行此操作。问题是当我执行程序时我什么都看不到!!!为什么?我的代码有什么问题?

Tnx

安德烈亚

【问题讨论】:

  • 请不要讽刺...如果我在 Eclipse 中执行此代码,Hello World 不会出现在我面前!!!
  • 另外,您应该只在事件调度线程中创建摆动组件。见concurrency in swing
  • 顺便说一句:最好的带有 java 和 swing 的 HelloWorld 在这里:stackoverflow.com/questions/2429369/…

标签: java swing


【解决方案1】:

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

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();
            }
        });
    }
}

【讨论】:

  • +1 用于解释 EDT 中的正确初始化。恐怕我多年来都做错了:-)
【解决方案2】:

只需添加

frame.setVisible(true);

到你的代码

查看Creating and Showing Java Swing Frames的步骤

//1. Create the frame.
JFrame frame = new JFrame("FrameDemo");

//2. Optional: What happens when the frame closes?
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//3. Create components and put them in the frame.
//...create emptyLabel...
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

//4. Size the frame.
frame.pack();

//5. Show it.
frame.setVisible(true);

你错过了#5

【讨论】:

    【解决方案3】:

    你需要一个

    frame.setVisible(true);
    

    调用你的代码。

    正如其他人提到的,您不应该将主要的Thread 用于 gui 操作。我建议你参考 SWING 的official tutorials,它们很有帮助,你会在那里看到正确线程的示例。

    【讨论】:

      【解决方案4】:

      在你的方法中保留这一行

      frame.setVisible(true);
      

      【讨论】:

        猜你喜欢
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 2019-06-06
        • 1970-01-01
        • 2012-07-30
        相关资源
        最近更新 更多