简体   繁体   English

对齐JTable中单元格的值?

[英]Align the values of the cells in JTable?

I'm not aware of how to align the values of cells in JTable. 我不知道如何在JTable中对齐单元格的值。

For Ex,The Jtable shows, Name Salary Mr.X 100000.50 XXXX 234.34 YYYy 1205.50 对于Ex,Jtable显示,姓名薪水Mr.X 100000.50 XXXX 234.34 YYYy 1205.50

I want to align the "Salaries" in the following format. 我想以下列格式对齐“工资”。

   Name      Salary
   Mr.X      100000.50
   XXXX         234.34
   YYYy        1205.50

How to align as above the JTable 如何在JTable上面对齐

There is no need to create a custom class for this, just use the default renderer: 无需为此创建自定义类,只需使用默认渲染器:

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

Or a better approach is to actually store Double values in the table and then a proper numeric renderer will be used and number renderers are automatically right aligned. 或者更好的方法是在表中实际存储Double值,然后使用正确的数字渲染器,并且数字渲染器自动右对齐。 You can then customize the formatting of the number using a Table Format Renderer . 然后,您可以使用表格格式渲染器自定义数字的格式

We need to make a small correction, the right way is DefaultTableCellRenderer.RIGHT 我们需要做一个小的修正,正确的方法是DefaultTableCellRenderer.RIGHT

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

Notice the difference with the original response of camickr, "Price" is the name of the column, change according to the case. 注意与camickr的原始响应的差异,“Price”是列的名称,根据情况改变。

A simple way is using DefaultTableModel and override method getColumnClass() 一种简单的方法是使用DefaultTableModel和override方法getColumnClass()
Ex: 例如:

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

If you return Integer, your column will align right anh if return String your column will align left. 如果返回Integer,则列将对齐anh如果返回String,则列将向左对齐。

From this forum post : 这个论坛帖子

Create a class that extends DefaultTableCellRenderer and implement the getTableCellRendererComponent() method, something like: 创建一个扩展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;
}

and install this renderer for the column in question. 并为相关列安装此渲染器。

Now you only need to make sure that each value has the same number of decimal places because for most fonts, all digits have the same width. 现在您只需要确保每个值具有相同的小数位数,因为对于大多数字体,所有数字都具有相同的宽度。

I have got a method that aligns a column in a table to the right: 我有一个方法可以将表中的列与右侧对齐:

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

as for more than one table at once i managed to do this ... its as @camickr posted but i added the headers too 至于多个表,我设法做到这一点...它作为@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);
        }
    }

The way to go about it is to specify a custom cell renderer for each column. 解决方法是为每列指定自定义单元格渲染器 Each renderer will format that data differently (names will e aligned to the left, decimals to the right, ...) 每个渲染器将以不同方式格式化该数据(名称将对齐左侧,小数位于右侧,......)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM