11

内部のデータに応じて、JTable の列幅を一致させようとしています。私のコード:

    for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){
        int  width =0;
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) {
         TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column);
         Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column);
         width = Math.max (comp.getPreferredSize().width, width);
         System.out.println(width);
     }
    TableColumn col = new TableColumn();
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column);
    System.out.println(width);
    col.setWidth(width);
    gui.testsuiteInfoTable.revalidate();

    }
}

サイズは正しいと思いますが、テーブルの列はすべて同じ幅です! テーブルは GridBagLayout の ScrollPane に埋め込まれていますが、それが問題ですか? 提案をありがとう。

4

3 に答える 3

24

必要なのはこれだけです:

JTable table = new JTable(){
    @Override
       public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
           Component component = super.prepareRenderer(renderer, row, column);
           int rendererWidth = component.getPreferredSize().width;
           TableColumn tableColumn = getColumnModel().getColumn(column);
           tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
           return component;
        }
    };
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

表は、コンテンツに合わせて各列の幅を自動的に調整します。サイズ変更をトリガーするタイミングを制御する必要はありません。

于 2014-08-29T14:51:02.040 に答える
6
col.setWidth(width);

JTable API を読み、 のリンクに従ってくださいHow to Use Tables。そのチュートリアルではsetPreferredWidth(...)、列の幅を提案するために を使用しています。

これを行うTable Column Adjusterもチェックしてみてください。このソリューションでは、列ヘッダーの幅も考慮に入れることができます。

于 2013-07-25T14:44:46.877 に答える