2016-07-01 3 views
1

Я пытаюсь добавить JTable в кадр, но не работает, я не пытался:Добавление JTable в JFrame

public Jtablee() 
    { 
     setSize(400,400); 

     String[] columnsNames = {"firstName", "LastName", "sport", "# ofYear", "vegetarian"}; 

     Object[][] data = {{"Katty", "Smith", "SnowBoard", new Integer(5), new Boolean(false)}, {"Jhon", "Doe", "Rowing", new Integer(3), new Boolean(true)}, 
       {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},{"Jane", "White", "Speed ride", new Integer(20), new Boolean(true)}}; 

     JTable t = new JTable(data, columnsNames); 
     add(t.getTableHeader(), BorderLayout.PAGE_START); 
     add(t, BorderLayout.CENTER); 

     setLayout(new BorderLayout()); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

Просто появится пустая рамка, без JTable

Примечание: Я не хотите добавлять его в scrollPane, я хочу добавить его напрямую.

+0

Что происходит, когда вы это делаете? Отображается ли рамка вообще? Любое исключение? – Thomas

+0

@Thomas Пустой jframe появляется без JTABLE –

+0

Возможно, вы захотите предоставить дополнительную информацию, то есть когда вы добавите таблицу? С какими данными/столбцами вы его инициализируете? Как настроен ваш кадр? и т. д. – Thomas

ответ

0

Единственное, что вы должны сделать, чтобы видны ваши JTable, это удалить "setLayout(BorderLayout.CENTER)", причину, которая делает конфликт с кодом (это overrading в BorderLayout ранее создать) ,

1

Вам не нужно звонить setLayout(new BorderLayout()), поскольку панель контента Container уже имеет этот макет. Вызвав его после, добавление ваших компонентов приведет к их исчезновению.

Вам также не нужно звонить setSize() на номер JFrame. Вместо этого вы должны вызвать pack(), который будет автоматически изменять размер его, чтобы соответствовать его содержимому (таблица)

Наконец, вы не должны использовать new Integer() и new Boolean() здесь нет необходимости бокса, вместо того, чтобы использовать примитивы.

Так что ваш код должен выглядеть следующим образом:

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

public class Test extends JFrame { 

    public Test() { 

     String[] columnsNames = {"firstName", "LastName", "sport", "# ofYear", "vegetarian"}; 

     Object[][] data = { 
       {"Katty", "Smith", "SnowBoard", 5, false}, 
       {"Jhon", "Doe", "Rowing", 3, true}, 
       {"Sue", "Black", "Knitting", 2, false}, 
       {"Jane", "White", "Speed ride", 20, true} 
     }; 

     JTable table = new JTable(data, columnsNames); 
     add(table.getTableHeader(), BorderLayout.PAGE_START); 
     add(table, BorderLayout.CENTER); 

     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 
} 
+1

Не забудьте обернуть [вызовы компонентам Swing на EDT] (http://stackoverflow.com/questions/15302085/why-to-use-swingutilities-invokelater-in-main-method) – copeg

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