2015-11-22 3 views
2

Я не понимаю, где проблема. JTable встроен в JScrollPanel, встроенный в JPanel. Таблица не отображается. Любая помощь оценивается. Я, вероятно, пропустил, чтобы добавить некоторые элементы. Проверено тщательно, но ничего не может найти. Это просто конструктор:JTable в JPanel Не отображается

public TableIssues() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 894, 597); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JPanel patientsPanel = new JPanel(); 
     patientsPanel.setBounds(6, 152, 882, 417); 
     patientsPanel.setLayout(null); 

     String[] patientsColumns = { 
       "one", 
       "two", 
       "three"}; 
     String[][] tableInput={{"first","second","third"},{"first","second","third"}}; 

     patientsTable = new JTable(tableInput,patientsColumns); 
     JScrollPane scroll = new JScrollPane(); 
     scroll.setBounds(0, 0, 882, 363); 
     scroll.setLayout(null); 
     scroll.setViewportView(patientsTable); 
     patientsPanel.add(scroll); 

     JButton addPatietsButton = new JButton("Add"); 
     addPatietsButton.setFont(new Font("Lucida Grande", Font.PLAIN, 20)); 
     addPatietsButton.setBounds(356, 375, 211, 36); 

     patientsPanel.add(addPatietsButton); 
     contentPane.add(patientsPanel); 

    } 
+0

Пожалуйста, смотрите изменить, чтобы ответить с примерами кода. –

ответ

5

НИКОГДА сделать это:

scroll.setLayout(null); 

Вы разрушить макет JScrollPane, и поэтому он полностью теряет свою функциональность, таким образом, стреляя себе в ногу. Удалите эту строку.

В то время как пустые макеты и setBounds() могут показаться Swing новичками, как самый простой и лучший способ создания сложных графических интерфейсов, чем больше Swing GUI вы создадите более серьезные трудности, с которыми вы столкнетесь при их использовании. Они не будут изменять размеры ваших компонентов при изменении размера графического интерфейса, они являются королевской ведьмой для улучшения или поддержки, они полностью не выполняются при размещении в scrollpanes, они выглядят ужасно ужасно при просмотре на всех платформах или разрешениях экрана, отличных от исходного ,

Например, это GUI

enter image description here

создан этот код:

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class TableIssues2 extends JPanel { 
    private static final int GAP = 5; 
    private static final String[] COL_NAMES = {"One", "Two", "Three"}; 
    private DefaultTableModel model = new DefaultTableModel(COL_NAMES, 0); 
    private JTable patientsTable = new JTable(model); 

    public TableIssues2() { 
     JPanel buttonPanel = new JPanel(new GridLayout(1, 0, GAP, GAP)); 
     buttonPanel.add(new JButton("Add")); 
     buttonPanel.add(new JButton("Remove")); 
     buttonPanel.add(new JButton("Exit")); 

     JPanel bottomPanel = new JPanel(); 
     bottomPanel.add(buttonPanel); 

     for (int i = 0; i < 5; i++) { 
      model.addRow(new String[]{"First", "Second", "Third"}); 
     } 
     setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP)); 
     setLayout(new BorderLayout(GAP, GAP)); 
     add(new JScrollPane(patientsTable), BorderLayout.CENTER); 
     add(bottomPanel, BorderLayout.PAGE_END); 
    } 

    private static void createAndShowGui() { 
     TableIssues2 mainPanel = new TableIssues2(); 

     JFrame frame = new JFrame("TableIssues2"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 
Смежные вопросы