【问题标题】:How to set size of Dialog to match size of JTable?如何设置对话框的大小以匹配 JTable 的大小?
【发布时间】:2013-09-28 18:06:49
【问题描述】:

我有一个带有 JTable 的 JDialog。我想要的是一个大小等于表格的对话框窗口(如果它不超过最大大小)。在表格中,我希望任何单元格的大小为 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 作为标题。有什么方法可以让它占用更少的空间?

【问题讨论】:

    标签: java swing jscrollpane jdialog


    【解决方案1】:

    您看到的额外区域是 scrollPane 的:它尊重其视图的 preferredScrollableViewportSize(如果它实现 Scrollable)。一个普通的 JTable 将该属性作为(相当任意的)硬编码大小返回。所以解决方案是子类化并实现该方法以返回合理的东西,f.i.就可见行而言:

    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 属性。

    【讨论】:

      【解决方案2】:

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

      JTable table = new JTable(...);
      table.setPreferredScrollableViewportSize(table.getPreferredSize());
      JScrollPane scrollPane = new JScrollPane( table );
      dialog.add( scrollPane );
      dialog.pack();
      dialog.setVisible( true );
      

      【讨论】:

      • 通常要小心(如你所知 :-) 对 prefScrollableSize 进行硬编码只比正常的 setXXSize 稍微少一点邪恶
      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2019-04-13
      • 2011-08-25
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多