我找到了一种在表格中分配单元格的方法,这似乎是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
中找不到修改文本对齐方法。这种方法有什么不对吗?
答案 0 :(得分:2)
出于此目的使用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
是切换的条件。
答案 1 :(得分:2)
(J)Component
没有在API
有两种方式
将(J)Component
投射到JLabel
为class
管理的getColumnClass
设置此值
DefaultTableCellRenderer stringRenderer = (DefaultTableCellRenderer)
table.getDefaultRenderer(String.class);
stringRenderer.setHorizontalAlignment(SwingConstants.CENTER);
答案 2 :(得分:0)
我要做出结论。
对于这个特定问题,我们可以把它分成两个:
要分配单元格,我最初的方式和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
,但我没有这样做。