web-dev-qa-db-ja.com

JTableのセルの値を揃えますか?

JTableのセルの値を調整する方法を知りません。

Exの場合、Jtableショー、Name Salary Mr.X 100000.50 XXXX 234.34 YYYy 1205.50

「給与」を次の形式に揃えたい。

   Name      Salary
   Mr.X      100000.50
   XXXX         234.34
   YYYy        1205.50

JTableの上に整列する方法

24
Venkat

このためにカスタムクラスを作成する必要はありません。デフォルトのレンダラーを使用するだけです。

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);

または、より良いアプローチは、実際にDouble値をテーブルに保存し、適切な数値レンダラーが使用され、数値レンダラーが自動的に右揃えされることです。その後、 Table Format Renderer を使用して、数値のフォーマットをカスタマイズできます。

43
camickr

少し修正する必要があります。正しい方法はDefaultTableCellRenderer.RIGHTです。

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );

Camickrの元の応答との違いに注意してください。「Price」は列の名前であり、ケースに応じて変更します。

9
Adrian

簡単な方法は、DefaultTableModelとオーバーライドメソッドを使用することですgetColumnClass()
例:

DefaultTableModel model = new DefaultTableModel() {
        @Override
        public Class getColumnClass(int columnIndex) {
            if (columnIndex == 0) {
                return Integer.class;
            } else {
                return String.class;
            }
        }
    };

Integerを返す場合、文字列を返すと列が左に整列する場合、列は右に整列します。

5
Lê Quang Duy

このフォーラム投稿 から:

DefaultTableCellRendererを拡張するクラスを作成し、次のようなgetTableCellRendererComponent()メソッドを実装します。

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
    JLabel renderedLabel = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    renderedLabel.setHorizontalAlignment(SwingConstant s.RIGHT);
    return renderedLabel;
}

問題の列にこのレンダラーをインストールします。

ほとんどのフォントではすべての数字の幅が同じであるため、各値の小数点以下の桁数が同じであることを確認するだけです。

4
Aaron Digulla

テーブルの列を右に揃えるメソッドがあります:

private void alignRight(JTable table, int column) {
    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
    table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}
3
fabian

一度に複数のテーブルについては、私はこれを行うことができました... @camickrが投稿されましたが、ヘッダーも追加しました

    DefaultTableCellRenderer rightRenderer_c = new DefaultTableCellRenderer();
    DefaultTableCellRenderer rightRenderer_h = new DefaultTableCellRenderer();
    rightRenderer_c.setHorizontalAlignment( javax.swing.JLabel.RIGHT );

    for(JTable t : Tables){ //Tables is an ArrayList<JTable>

        //for the headers :
        rightRenderer_h = (DefaultTableCellRenderer) t.getTableHeader().getDefaultRenderer();
        rightRenderer_h.setHorizontalAlignment( javax.swing.JLabel.RIGHT );

        //for cells :
        for(int i=0; i < t.getColumnCount(); i++){
            t.getColumnModel().getColumn(i).setCellRenderer(rightRenderer_c);
        }
    }
0
OmAr

これを回避する方法は、各列にカスタム セルレンダラー を指定することです。各レンダラーはそのデータを異なる方法でフォーマットします(名前はeが左に、小数が右に整列されます...)

0
Itay Maman