Swing:似乎无法让JTable正确显示

时间:2010-02-04 15:56:08

标签: swing layout jtable

以下代码显示了我正在尝试修复的错误。我有两种显示表格的方法(下面的层次结构):

  1. JTable直接在JOptionPane中:显示表格。

    JOptionPane
        JTable
    
  2. JOptionPane中JPanel的滚动窗格中的JTable:似乎无法显示该表。

    JOptionPane
        JPanel
            JScrollPane
                JTable
    
  3. 由于它与创建表格的功能相同,所以我非常肯定我只是做错了w / r / t大小/布局。有什么建议吗?

    import java.awt.Dimension;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    
    public class TableTest2 {   
        public static void testTable(JTable t) {
            t.setModel(new AbstractTableModel() {
                public String getColumnName(int col) { return "col"+Integer.toString(col); }
                public int getRowCount() { return 4; }
                public int getColumnCount() { return 4; }
                public Object getValueAt(int row, int col) {
                    return Integer.toString(row*col);
                }
                public boolean isCellEditable(int row, int col) { return false; }
                public void setValueAt(Object value, int row, int col) { }
            });
        }
        public static void main(String[] args) {
            doTest1();
            doTest2(null, null);
            doTest2(new Dimension(500,500), null);
            doTest2(new Dimension(500,500), new Dimension(400,400));
        }
        private static void doTest1() {
            JTable t = new JTable();
            t.setPreferredSize(new Dimension(500,500));
            TableTest2.testTable(t);
            JOptionPane.showMessageDialog(null, t, "test1", JOptionPane.INFORMATION_MESSAGE);
        }
        private static void doTest2(Dimension d1, Dimension d2) {
            JTable t = new JTable();
            TableTest2.testTable(t);
            JPanel panel = new JPanel();
            JScrollPane sp = new JScrollPane();
            sp.add(t);
            if (d1 != null)
                sp.setPreferredSize(d1);
            panel.add(sp);
            if (d2 != null)
                panel.setPreferredSize(d2);
            JOptionPane.showMessageDialog(null, panel, "test2", JOptionPane.INFORMATION_MESSAGE);
        }
    }
    

1 个答案:

答案 0 :(得分:2)

试试这个:

  JScrollPane sp = new JScrollPane(t);

在构造函数中为scrollpane提供组件。

您不会向滚动窗格添加组件。你可以设置一个viewport lik ethis:

  sp.getViewPort().setView(t);

而不是

  sp.add(t);