自定义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); }
如您所见,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); }