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の上に整列する方法
このためにカスタムクラスを作成する必要はありません。デフォルトのレンダラーを使用するだけです。
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);
または、より良いアプローチは、実際にDouble値をテーブルに保存し、適切な数値レンダラーが使用され、数値レンダラーが自動的に右揃えされることです。その後、 Table Format Renderer を使用して、数値のフォーマットをカスタマイズできます。
少し修正する必要があります。正しい方法はDefaultTableCellRenderer.RIGHTです。
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );
Camickrの元の応答との違いに注意してください。「Price」は列の名前であり、ケースに応じて変更します。
簡単な方法は、DefaultTableModelとオーバーライドメソッドを使用することですgetColumnClass()
例:
DefaultTableModel model = new DefaultTableModel() {
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0) {
return Integer.class;
} else {
return String.class;
}
}
};
Integerを返す場合、文字列を返すと列が左に整列する場合、列は右に整列します。
このフォーラム投稿 から:
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;
}
問題の列にこのレンダラーをインストールします。
ほとんどのフォントではすべての数字の幅が同じであるため、各値の小数点以下の桁数が同じであることを確認するだけです。
テーブルの列を右に揃えるメソッドがあります:
private void alignRight(JTable table, int column) {
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}
一度に複数のテーブルについては、私はこれを行うことができました... @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);
}
}
これを回避する方法は、各列にカスタム セルレンダラー を指定することです。各レンダラーはそのデータを異なる方法でフォーマットします(名前はeが左に、小数が右に整列されます...)