2013-09-24 56 views
1

我学习的Java Swing和我有一些问题,下面简单的代码:如何在Java Swing中创建hello世界?我的代码有什么问题?

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对象,并插入到它的世界您好的JLabel对象设置一些属性。

我把它做成main()方法。问题是,当我执行程序时,我什么都看不到!为什么?我的代码有什么问题?

TNX

安德烈

+1

请不要讽刺......如果我在Eclipse中执行此代码,Hello World不会出现在我的面前! – AndreaNobili

+0

另外,您应该仅在事件派发线程中创建swing组件。请参见[并发性](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)。 – kiheru

+0

顺便说一句:用java和swing最好的HelloWorld在这里:http://stackoverflow.com/questions/2429369/whats-the-fastest-way-to-draw-a-hello-world-in-java – math

回答

5

只需添加

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

你错过out#5

9

您所创建的框架,但你是不是显示它。致电

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

+1解释EDT中的正确初始化。我害怕我多年来做错了这些:-) –

2

你需要在

frame.setVisible(true); 

打电话给你码。

正如其他人提到你不应该使用主要Thread作为gui操作。我建议你应该参考SWING的official tutorials,他们相当有帮助,你会在那里看到适当的线程的例子。

2

保留此行中你的方法

frame.setVisible(true);