2014-02-27 143 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