2012-03-29 5 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

Вы должны установить preferredSize() на JTable: и сделать pack() впоследствии.

Edit:

Переехал setVisible(true) после pack(). Это 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()' :-) –

+0

Да, но попробуйте, это сработает ... Я изменю свой ответ. – alexvetter

+0

, даже если вы попробуете то, что ОП дал в вопросе, даже это тоже работает иногда :-) –

2
  1. Построить экземпляр JFrame
  2. Добавьте компоненты к экземпляру JFrame
  3. Осознайте JFrame экземпляра (т.е. setVisible(true))

Причина ни один из компонентов не отображаться, когда Экземпляр JFrame показан потому, что вы добавляете к нему компоненты после его реализации. Если вы хотите, чтобы компоненты отображались, либо выполните описанные выше шаги, либо в конце метода buildGui, повторите проверку/перерисовку контейнера.