我在编辑DefaultTableCellRenderer
时遇到问题。
我想在我的表格中右对齐第二列。但是,下面的代码右对齐所有列,而不仅仅是第二列!
谁能看到我哪里出错了?
for (int i=0; i < tblMenu.getModel().getColumnCount(); i++)
{
DefaultTableCellRenderer renderer =
(DefaultTableCellRenderer) tblMenu.getCellRenderer(i, 1);
renderer.setHorizontalAlignment(JTextField.RIGHT);
}
答案 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();
}
}