如何在 Java 中编辑 DefualtTableCellRenderer?

问题描述 投票:0回答:3

我在编辑

DefaultTableCellRenderer
时遇到问题。

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

有人能看出我哪里出错了吗?

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

    renderer.setHorizontalAlignment(JTextField.RIGHT); 
}
java swing jtable tablecellrenderer
3个回答
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
投票

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

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

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

也许比 A Lee 的方式简单一点(取决于你正在做多少其他定制)。


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();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.