java - 如何设置Dialog的大小以匹配JTable的大小?

标签 java swing jscrollpane jdialog

我有一个 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 作为标题。有什么办法可以让它占用更少的空间吗?

最佳答案

您看到的额外区域是scrollPane的:它尊重其 View 的preferredScrollableViewportSize(如果它实现Scrollable)。普通 JTable 返回该属性作为(相当任意的)硬编码大小。因此,解决方案是子类化并实现该方法以返回合理的内容,例如就visibleRows而言:

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);
    }

};

或者使用 JXTable(SwingX project 的一部分),它已经提供了属性visibleRows/-Columns。

关于java - 如何设置Dialog的大小以匹配JTable的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070086/

相关文章:

java - onErrorResume 和 onErrorReturn 的区别

java - 单击对话框按钮退出应用程序

java - 通用类型的 Jersey ClientResponse.getEntity

java - 如果堆大小增加,应用程序吞吐量会下降吗?

java - java swing应用程序中的快速搜索?

java - JComboBox 自动完成

java - 如何向 JScrollPane 添加水平/垂直滚动条

java - 如何将 double 分成单独的收集值

java - 将 JGoodies Panel 的最大宽度设置为 JScrollPane 大小

java - JTable左上线不可见