2014-02-27 91 views
1

我正在關注一本名爲「JFC Swing教程(第二版)」的書,我幾乎在開始時我已經遵循這個代碼,它應該顯示按鈕和內容窗格中的標籤,但所有即時消息都是空白屏幕。有任何想法嗎? 謝謝。Java Swing空白屏幕而不是窗口顯示

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

public class m extends JFrame 
{ 
    void UserFrame() 
    { 
     //JFrame.setDefaultLookAndFeelDecorated(true); 
     JFrame frame = new JFrame("Hellow You"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel jp = new JPanel(new GridLayout(0,1)); 

     //makes label 
     JLabel label = new JLabel("Sup "); 
     //adds to the frames content pane a label 
     frame.getContentPane().add(label); 

     JButton button = new JButton("Hai"); 
     frame.getContentPane().add(button); 


     jp.add(button); 
     jp.add(label); 

     jp.setBorder(BorderFactory.createEmptyBorder(30,30,10,30)); 

     //pack set the window to what it needs AKA to display all components 
     frame.pack(); 
     //frame.setSize(250, 250); 
     //shows window 
     frame.setVisible(true);  
    } 



    public static void main(String[] args) 
    { 
     final m window = new m(); 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       window.UserFrame(); 
      } 
     }); 
    } 

} 
+0

你的空白屏幕至少是合適的尺寸? –

+0

不,它的最小尺寸可以是 – Definity

+1

我想你錯過了讓第一個窗口可見,比如m.setVisible(true); –

回答

4

只需添加

frame.add(jp); 

只是

frame.pack(); 

前這裏發生了什麼?您正確地將所有小部件添加到JPane中,但您基本上已將JPane扔掉,並且沒有在任何地方使用它。

這將足以讓它正常工作。

如果你想正確地做到這一點,你也應該刪除frame.getContentPane().add(label);frame.getContentPane().add(button);(謝謝@dic19注意!)。這些不會像你使用它的方式工作。

+1

+1同時刪除'frame.getContentPane().add(label)'和'frame.getContentPane().add(button)'。 – dic19

+1

@ dic19我完全同意,感謝您注意到,我將這添加到我的答案中。這些陳述在OP使用它們的方式上是無用的。 –

+1

我已經提出了答案,所以我不能再做一次。謝謝! – dic19