0

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 が必要です。スペースを節約する方法はどこにありますか?

4

2 に答える 2

1

あなたが見ている余分な領域はscrollPaneのものです:それはそのビューのpreferredScrollableViewportSizeを尊重します(Scrollableを実装している場合)。プレーンな JTable は、そのプロパティを (むしろ任意の) ハードコーディングされたサイズとして返します。したがって、解決策はメソッドをサブクラス化して実装し、visibleRows に関して適切な fi を返すことです。

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 に答える