2016-04-28 4 views
-1

мой вопрос может показаться немного глупым, но каждый раз, когда я использую swing, у меня возникают проблемы с таблицами. Поэтому я работаю над школьным проектом, и мне нужно добавить JTable в JPanel с GridBagLayout, но я не вижу JTable im Adding на моей панели.Как добавить JTable в JPanel

Вот код:

public class MainView extends JFrame { 

    private static Dimension dimensionFenetre = new Dimension(1980, 1000); 
    Object[][] team = { 
     {"France", "80"}, 
     {"Germany", "80"}, 
     {"Italy", "80"}, 
     {"England", "80"} 
}; 

String titleColumn[] = {"Team", "Overall"}; 

public MainView() { 

    JPanel panelFenetre = new JPanel(new GridBagLayout()); 
    add(panelFenetre); 
    setVisible(true); 
    panelFenetre.setVisible(true); 
    setSize(dimensionFenetre); 

    panelFenetre.add(getTable1(), getTable1Constraints()); 
} 

private JTable getTable1() { 

    JTable table = new JTable(team, titleColumn); 
    table.setVisible(true); 

    return table; 
} 

private GridBagConstraints getTable1Constraints() { 

    GridBagConstraints gbcTable1 = new GridBagConstraints(
      0, 1, 
      1, 1, 
      1, 1, 
      GridBagConstraints.CENTER, 
      GridBagConstraints.NONE, 
      new Insets(0, 0, 0, 0), 
      0, 0); 

    return gbcTable1; 
    } 
} 

И простой Main:

public class Main { 

public static void main(String[] args) { 
    MainView mainView = new MainView(); 
    } 
} 

Если кто-то, есть некоторые подсказки, это будет действительно здорово.

Спасибо заранее.

ответ

2
  1. Не называйте setSize(), а скорее pack() после добавления компонентов, чтобы позволить менеджерам компоновки делать свою работу.
  2. Сначала добавьте JTable в JScrollPane, а затем добавьте его в GUI.
  3. Главное, не назовите setVisible(true) на JFrame до после, добавив все компоненты.

отлично работает для меня:

public MainView() { 
    JPanel panelFenetre = new JPanel(new GridBagLayout()); 
    add(panelFenetre); 

    // setVisible(true); 
    // panelFenetre.setVisible(true); 
    // setSize(dimensionFenetre); 

    panelFenetre.add(new JScrollPane(getTable1()), getTable1Constraints());   
    pack(); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 
+0

Во-первых, спасибо, что нашли время, чтобы ответить мне. Поэтому я следую вашим указаниям. Теперь я вижу границу JScrollPane, я думаю, если я назову 'setPreferedSize()' на ней. Но я не вижу таблицу с данными на ней. –

+0

@SebastienMURE: вы должны делать что-то неправильно, так как оно отлично работает для меня. См. Правки выше. –

+0

Да, кажется, что это была проблема в том, как я создавал JScrollPane, теперь все в порядке, спасибо большое. –

Смежные вопросы