自定义TableCellRenderer不工作(表行渲染)

我正在尝试渲染我的jtable的特定行(它应该有不同的背景颜色,它应该有粗体字符)。

我发现了几个关于如何实现自定义TableCellRenderer ( 此处和此处 )以及如何使用表和本教程( 表行渲染 )的教程的问题。

我正在使用JInternalFrame来显示JTable 。 我试图实现这两个解决方案,但是没有getCellRendererprepareRenderer 。 在调试时,我可以看到我的新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); } 

如您所见,model是我对AbstractTableModel实现。

当然,我错过了一些东西。 我试着调用repaint()来查看是否发生了什么,但什么也没发生。

我还尝试将JPane放在我的JInternalFrame中,然后将JScrollPane添加到其中,但也没有发生任何事情。

有帮助吗?

TIA,

短发

正如概念:编辑器和渲染器中所讨论的那样,“该表调用表模型的getColumnClass方法,该方法获取列的单元格的数据类型。” 您应该validation您的AbstractTableModel实现返回一个合适的值,如本例所示 。

附录:

我正在尝试渲染一行,而不是一列。

Rob Camick的表行渲染方法覆盖prepareRenderer()似乎是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); }