2015-10-23 2 views
0

Я хочу создать образец таблицы в пользовательском интерфейсе. Но он не показывает, что я пробовал. Может быть, кто-то может мне помочь?JTable не отображается в пользовательском интерфейсе?

public void createGUI(){ 
     JFrame myframe = new JFrame("Frame"); 
     JButton firstButton = new JButton("Connect"); 


     myframe.setLayout(null); 
     myframe.setVisible(true); 
     myframe.setSize(500, 500); 
     //myframe.add(firstButton); 


     firstButton.addActionListener(new handler("ConnectButton")); 
     firstButton.setSize(150, 100); 
     firstButton.setLocation(100, 100); 

     String[] columnNames = {"First Name", 
       "Last Name", 
       "Sport", 
       "# of Years", 
       "Vegetarian"}; 

     Object[][] data = { 
       {"Kathy", "Smith", 
       "Snowboarding", new Integer(5), new Boolean(false)}, 
       {"John", "Doe", 
       "Rowing", new Integer(3), new Boolean(true)}, 
       {"Sue", "Black", 
       "Knitting", new Integer(2), new Boolean(false)}, 
       {"Jane", "White", 
       "Speed reading", new Integer(20), new Boolean(true)}, 
       {"Joe", "Brown", 
       "Pool", new Integer(10), new Boolean(false)} 
      }; 

     JTable table = new JTable(data, columnNames); 
     table.setVisible(true); 

     //JScrollPane scrollPane = new JScrollPane(table); 
     //scrollPane.setVisible(true); 
     table.setFillsViewportHeight(true); 
     myframe.add(table); 
    } 

ответ

2

Проблема заключается в том, когда вы устанавливаете раскладку на null в этой строке:

myframe.setLayout(null);

Просто удалите эту строку, и он будет работать хорошо. Потому что окно не может быть отображено с макетом, установленным в null. Поэтому, как только вы удалите эту строку, будет использоваться макет по умолчанию.

Вот еще немного информации о компоновщикам вы можете прочитать: https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Вторая вещь, которую я извлекал была эта линия:

table.setFillsViewportHeight(true); 

Вы должны использовать myframe.pack(); вместо так упаковывает все компоненты на ваш кадр.

Так я попал на йоту, что:

public static void createGUI() { 
     JFrame myframe = new JFrame("Frame"); 
     JButton firstButton = new JButton("Connect"); 

     myframe.setSize(500, 500); 

     String[] columnNames = {"First Name", 
      "Last Name", 
      "Sport", 
      "# of Years", 
      "Vegetarian"}; 

     Object[][] data = { 
      {"Kathy", "Smith", 
       "Snowboarding", new Integer(5), new Boolean(false)}, 
      {"John", "Doe", 
       "Rowing", new Integer(3), new Boolean(true)}, 
      {"Sue", "Black", 
       "Knitting", new Integer(2), new Boolean(false)}, 
      {"Jane", "White", 
       "Speed reading", new Integer(20), new Boolean(true)}, 
      {"Joe", "Brown", 
       "Pool", new Integer(10), new Boolean(false)} 
     }; 

     JTable table = new JTable(data, columnNames); 
     table.setVisible(true); 

     myframe.add(table); 
     myframe.pack();   // added this 
     myframe.setVisible(true); // and moved this from top 
    } 

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

enter image description here

+0

Эта строка 'myframe.setVisible (true);' также должна быть ** последней, ** сразу после 'pack()' .. –

+0

Не работает Kiki:/проблема не в том, что окно выиграло ' t показать, это просто таблица. Я установил макет в «null», чтобы я мог разместить элементы, где я хочу, это был план. Но я сообщу больше о layoutmanager :) кстати. код, который вы опубликовали в вашей программе? Это почему-то не помогло мне :( – Dyrdek

+0

@Dyrdek i обновил код, а рамка с таблицей получилась красиво. – Kiki

0

Вы не используете менеджер компоновки [myframe.setLayout (нуль) ], поэтому вам придется иметь дело с местоположением и размером самостоятельно.

Попробуйте добавить:

table.setLocation(1, 1); 
    table.setSize(200,200); 

и он будет работать.

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