2013-09-24 60 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);