0

我有一个 JDialog,里面有一个 JTable。我想要的是一个大小等于表格的对话框窗口(如果它不超过最大大小)。在表格中,我希望任何单元格的大小为 80*25 像素。这是我现在拥有的代码:

JTable table = new JTable(res, varnames);
table.setRowHeight(25);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0; i <= nvars; i++) {
    table.getColumnModel().getColumn(i).setMinWidth(80);
    table.getColumnModel().getColumn(i).setMaxWidth(80);
    table.getColumnModel().getColumn(i).setPreferredWidth(80);
}
JScrollPane tableSP = new JScrollPane(table);
out.getContentPane().add(tableSP);
table.setEnabled(false);
out.pack();
out.setVisible(true);

我得到的是一个对话框,其中包含适当大小的表格。但是对话框本身太大了,有很多空白。如何才能做到这一点?

编辑:发现导致额外空间的问题。出于某种原因,JScrollPane 比表本身占用更多的空间。但我需要 ScrollPane 作为标题。有没有办法让它占用更少的空间?

4

2 回答 2

1

您看到的额外区域是scrollPane:它尊重其视图的preferredScrollableViewportSize(如果它实现了Scrollable)。一个普通的 JTable 将该属性作为(相当随意的)硬编码大小返回。因此,解决方案是子类化并实现该方法以返回一些合理的东西,fi 在 vi​​sibleRows 方面:

JTable table = new JTable(10, 5) {
    // make this a property in a custom table
    int visibleRows = 10;
    /**
     * Overridden to exactly fit a given number of rows/columns
     */
    @Override
    public Dimension getPreferredScrollableViewportSize() {
        int height = visibleRows * getRowHeight();
        int width = getPreferredSize().width;
        return new Dimension(width, height);
    }

};

或者使用已经提供属性 visibleRows/-Columns 的JXTable( SwingX 项目的一部分)。

于 2013-09-29T09:14:09.453 回答
0

我想要的是一个大小等于表格的对话框窗口

JTable table = new JTable(...);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
dialog.add( scrollPane );
dialog.pack();
dialog.setVisible( true );
于 2013-09-30T15:54:32.680 回答