2015-11-22 238 views
2

我不明白问题出在哪里。 JTable嵌入在JPanel中嵌入的JScrollPanel中。该表不显示。任何帮助赞赏。我可能错过了添加一些元素。彻底检查,但找不到任何东西。这仅仅是一个构造函数:JPanel中的JTable不显示

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

NEVER做到这一点:

scroll.setLayout(null); 

你毁了JScrollPane的布局,因此它完全失去了它的功能,从而搬起石头砸自己的脚。删除该行。

虽然空布局和setBounds()对于Swing新手来说似乎是创建复杂GUI的最简单和最好的方式,但更多的Swing GUI会创建使用它们时遇到的更严重的困难。它们不会在GUI大小调整时调整组件的大小,它们是增强或维护的皇室女巫,当它们放在滚动窗格中时它们会完全失败,在所有平台或屏幕分辨率与原始视图不同时,它们看起来会非常糟糕。

例如,该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(); 
      } 
     }); 
    } 
}