如何用Java编辑DefualtTableCellRenderer?

时间:2012-02-14 23:34:25

标签: java swing jtable renderer

我在编辑DefaultTableCellRenderer时遇到问题。

我想在我的表格中右对齐第二列。但是,下面的代码右对齐所有列,而不仅仅是第二列!

谁能看到我哪里出错了?

for (int i=0; i < tblMenu.getModel().getColumnCount(); i++) 
{ 
    DefaultTableCellRenderer renderer = 
        (DefaultTableCellRenderer) tblMenu.getCellRenderer(i, 1);

    renderer.setHorizontalAlignment(JTextField.RIGHT); 
}

3 个答案:

答案 0 :(得分:3)

您可以使用匿名内部类覆盖表上的默认渲染器。类似下面的(未经测试的)代码可能会起作用:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if (column == 2) {
                setHorizontalAlignment(JTextField.RIGHT);
            }
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }

    });

答案 1 :(得分:1)

默认情况下,所有列都使用相同的渲染器,您需要为要更改的列提供不同的配置:

DefaultTableCellRenderer righty = new DefaultTableCellRenderer();
righty.setHorizontalAlignment(JTextField.RIGHT);

tblMenu.getColumnModel().getColumn(1).setCellRenderer(righty);

可能比A Lee更简单(取决于你正在做多少其他定制)。

答案 2 :(得分:1)

您可以为特定列设置单元格渲染器。您所要做的就是获取表的columnModel,然后获取特定列,然后为该列调用setCellRenderer。

但更简单的是,如果您的列包含数字数据,只需覆盖表模型的getColumnClass(...)以返回该列的Integer.class,表格将为您正确格式化。或者如果你知道你的表不会是空的,只需让表的数据告诉世界它是什么类型的类型,让JTable尽可能地渲染它:

// if the table isn't empty, this will work.
class MyDTableModel extends DefaultTableModel {
  public Class<? extends Object> getColumnClass(int c) {
     return getValueAt(0, c).getClass();
  }
}