自定义TableCellRenderer不起作用(表行呈现)
我正在尝试呈现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添加到其中,但也没有发生任何事情。
有什么帮助吗?
TIA,
鲍勃
回答:
正如“
概念:编辑器和渲染器
”中所讨论的,“表调用表模型的getColumnClass
方法,该方法获取列单元格的数据类型。”
您应该验证您的实现是否AbstractTableModel
返回了合适的值,如本示例中所示。
附录:
我正在尝试呈现一行,而不是一列。
罗布·卡米克(Rob Camick)的“
表行渲染”
方法可以替代此方法prepareRenderer()
。
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);
}
以上是 自定义TableCellRenderer不起作用(表行呈现) 的全部内容, 来源链接: utcz.com/qa/412739.html