我找到了一种在表中分配单元格的方法,它似乎是Component
JTable table = new JTable(...)
{
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// add custom rendering here
return c;
}
};
在代码中,c
是组件,但我在Component
中找不到修改文本对齐的方法。这种方法有错吗?
(J)Component
没有在API 中实现此方法
有两种方式
-
通过将
(J)Component
铸造为JLabel
-
为
getColumnClass
管理的class
设置此值
DefaultTableCellRenderer stringRenderer = (DefaultTableCellRenderer)
table.getDefaultRenderer(String.class);
stringRenderer.setHorizontalAlignment(SwingConstants.CENTER);
为此使用DefaultTableCellRenderer
,它有setHorizontalAlignment()
方法:
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable arg0,Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
Component tableCellRendererComponent = super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
int align = DefaultTableCellRenderer.CENTER;
if(condition){
align = DefaultTableCellRenderer.LEFT;
}
((DefaultTableCellRenderer)tableCellRendererComponent).setHorizontalAlignment(align);
return tableCellRendererComponent;
}
};
t.getColumnModel().getColumn(COLUMN).setCellRenderer(renderer);
COLUMN
为目标列,condition
为切换条件。
我要做一个结论。
对于这个特定的问题,我们可以将其分为两部分:
- 分配单元格
- agjust对齐
要分配单元格,我原来的方式和alex2410的方式应该都很有用。
JTable table = new JTable(...)
{
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// add custom rendering here
return c;
}
};
另一个
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
// add custom rendering here
return c;
}
};
t.getColumnModel().getColumn(COLUMN).setCellRenderer(renderer);
对于对齐,我发现唯一有用的方法是:
((DefaultTableCellRenderer)c).setHorizontalAlignment(SwingConstants.center);
在mKorbel的建议中,您可以将Component
c强制转换为JLabel
,但我没有做到。