自定义tablecellrenderer不起作用(表行渲染)
-
29-09-2019 - |
题
我正在尝试渲染我的JTable的特定行(它应该具有不同的背景颜色,并且应该具有大胆的字符)。
我发现了有关如何实施自定义的几个问题 TableCellRenderer
(这里 和 这里)和教程 如何使用桌子 和这个 (表行渲染).
我正在使用 JInternalFrame
显示 JTable
. 。我试图实施这两个解决方案,但也不 getCellRenderer
也不 prepareRenderer
被称为。调试时,我可以看到我的新JTable正在创建,但是,我在方法内的断点未调用。
我的代码看起来像:
this.add(createData(model));
private JComponent createData(ProfitLossTableModel model) {
JTable table = new JTable(model) {
public TableCellRenderer getCellRenderer(int row, int column) {
if ((row == 0) && (column == 0)) {
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(JLabel.RIGHT);
renderer.setBackground(Color.red);
return renderer;
} else {
return super.getCellRenderer(row, column);
}
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.changeSelection(0, 0, false, false);
table.setAutoCreateRowSorter(true);
return new JScrollPane(table);
}
如您所见,模型是我的实现 AbstractTableModel
.
当然,我错过了一些东西。我试图打电话 repaint()
看看是否发生了什么,但什么也没有发生。
我还试图将jpane放入我的jinternalframe中,然后将jscrollpane添加到其中,但也没有发生任何事情。
有帮助吗?
蒂亚,
鲍勃
解决方案
如所讨论的 概念:编辑和渲染器, ,“桌子调用表模型的 getColumnClass
方法,获取列单元的数据类型。“您应该验证您的实现 AbstractTableModel
返回合适的价值,如此所示 例子.
附录:
我正在尝试渲染一行,而不是一列。
罗布·卡米克(Rob Camick) 表行渲染 覆盖的方法 prepareRenderer()
似乎是Apropos。
tabbedPane.addTab("FirstRow", createFirstRow(model));
...
private JComponent createFirstRow(DefaultTableModel model) {
final Font font = new Font("Serif", Font.BOLD, 14);
JTable table = new JTable(model) {
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row)) {
c.setBackground(row == 0 ? Color.yellow: getBackground());
c.setFont(row == 0 ? font : getFont());
}
return c;
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.changeSelection(1, 1, false, false);
return new JScrollPane(table);
}
不隶属于 StackOverflow