代码之家  ›  专栏  ›  技术社区  ›  Venkat

对齐jtable中单元格的值?

  •  23
  • Venkat  · 技术社区  · 15 年前

    我不知道如何在jtable中对齐单元格的值。

    对于ex,jtable显示, 姓名工资 X 100000.50先生 XXXX 234.34号 年1205.50

    我想按以下格式调整“工资”。

       Name      Salary
       Mr.X      100000.50
       XXXX         234.34
       YYYy        1205.50
    

    如何在jtable上对齐

    7 回复  |  直到 11 年前
        1
  •  42
  •   Erick Robertson    11 年前

    不需要为此创建自定义类,只需使用默认渲染器:

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

    或者更好的方法是在表中实际存储双精度值,然后使用适当的数字渲染器,数字渲染器自动右对齐。然后可以使用 Table Format Renderer .

        2
  •  9
  •   Erick Robertson    11 年前

    我们需要做一个小小的修正,正确的方法是 默认TableCellRenderer.right

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

    请注意,与camickr的原始响应不同,“price”是列的名称,根据情况进行更改。

        3
  •  5
  •   Lê Quang Duy    12 年前

    一种简单的方法是使用defaultTableModel和override方法 获取列类()
    前任:

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

    如果返回整数,则列将右对齐;如果返回字符串,则列将左对齐。

        4
  •  4
  •   Aaron Digulla    15 年前

    this forum post :

    创建扩展的类 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;
    }
    

    并为相关列安装此渲染器。

    现在您只需要确保每个值具有相同的小数位数,因为对于大多数字体,所有数字的宽度都相同。

        5
  •  3
  •   Al Kepp    12 年前

    我有一个方法可以将表中的列与右侧对齐:

    private void alignRight(JTable table, int column) {
        DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
        rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
        table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
    }
    
        6
  •  0
  •   Itay Maman    15 年前

    方法是指定一个自定义 cell renderer 对于每列。每个渲染器将不同地格式化该数据(名称将左对齐,小数将右对齐,…)

        7
  •  0
  •   OmAr    11 年前

    至于不止一张桌子,我设法做到了……它是@camicker发布的,但我也添加了标题

        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);
            }
        }