2012-03-29 156 views
1

我有这个代码来创建一个简单的GUI(手动),我试图在框架上显示GUI组件。但是,当我运行该程序时,只显示框架而不显示组件,例如JTable。Java - Gui组件不显示

任何想法,为什么?

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

public class GUI extends JFrame { 
    public void buildGui() { 
     JFrame frame = new JFrame("Hotel TV Scheduler");  
     frame.setVisible(true); 

     Container contentPane = frame.getContentPane(); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BorderLayout()); 

     JPanel listPanel = new JPanel(); 
     listPanel.setLayout(new FlowLayout()); 

     JTable chOneTable = new JTable(); 
     JTable chTwoTable = new JTable(); 
     JTable listTable = new JTable(); 

     listPanel.add(chOneTable); 
     listPanel.add(chTwoTable); 
     listPanel.add(listTable); 

     contentPane.add(listPanel); 
    } 
} 

回答

3

您应该设置在JTable中一个preferredSize()并做pack()之后。

编辑:

pack()后感动setVisible(true)。这是order which is used by Sun/Oracle

public class GUI extends JFrame { 
    public void buildGui() { 
     JFrame frame = new JFrame("Hotel TV Scheduler"); 

     Container contentPane = frame.getContentPane(); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BorderLayout()); 

     JPanel listPanel = new JPanel(); 
     listPanel.setLayout(new FlowLayout()); 

     Dimension d = new Dimension(100, 100); 

     JTable chOneTable = new JTable(); 
     chOneTable.setPreferredSize(d); 

     JTable chTwoTable = new JTable(); 
     chTwoTable.setPreferredSize(d); 

     JTable listTable = new JTable(); 
     listTable.setPreferredSize(d); 

     listPanel.add(chOneTable); 
     listPanel.add(chTwoTable); 
     listPanel.add(listTable); 

     contentPane.add(listPanel); 

     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+1

你知道'frame.setVisible(true);',这个必须在'pack()'后面加上:-) – 2012-03-29 13:45:37

+0

是的,但是试试看......我会改变我的答案。 – alexvetter 2012-03-29 14:44:05

+0

即使你尝试OP给出的问题,甚至有时也会有效:-) – 2012-03-29 15:34:46

2
  1. 构建JFrame实例
  2. 添加组件到JFrame实例
  3. 实现了JFrame实例(即setVisible(true)

没有组分的原因出现时,显示的JFrame实例是因为在实现后向其添加组件。如果要显示组件,请按照上述步骤或在方法末尾重新验证/重新绘制容器。