自定义TableCellRenderer不起作用(表行呈现) [英] Custom TableCellRenderer not working (table row rendering)
问题描述
我正在尝试渲染jtable的特定行(它应该具有不同的背景色,并且应该具有粗体字符).
I'm trying to render an specific row of my jtable (it should have a different background color and it should have bold characters).
我发现了一些有关如何实现自定义TableCellRenderer
的问题(此处 )和教程如何使用表格和一个(表行渲染).
I found several questions regarding how to implement a custom TableCellRenderer
(here and here) and the tutorial How to Use Tables and this one (Table Row Rendering).
我正在使用JInternalFrame
来显示JTable
.我试图实现这两种解决方案,但是都没有调用getCellRenderer
和prepareRenderer
.调试时,我可以看到正在创建新的jtable,但是没有调用方法中的断点.
I'm using a JInternalFrame
to display the JTable
. I tried to implement both solutions but neither getCellRenderer
nor prepareRenderer
are being called. When debugging, I can see my new jtable being created, but, my breakpoint inside the methods aren't called.
我的代码如下:
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
的实现.
As you can see, model is my implementation of a AbstractTableModel
.
我当然想念一些东西.我试图打电话给repaint()
以查看是否发生了什么,但什么也没发生.
Of course that I'm missing something. I tried to call repaint()
to see if something happened, but nothing occurred.
我还尝试将JPane放入我的JInternalFrame内,然后将JScrollPane添加到其中,但也没有发生任何事情.
I also tried to put a JPane inside my JInternalFrame and them add the JScrollPane into it, but nothing occurred also.
有帮助吗?
TIA,
鲍勃
推荐答案
如 概念:编辑器和渲染器 ,表调用表模型的getColumnClass
方法,该方法将获取列单元格的数据类型."您应该验证AbstractTableModel
的实现是否返回了适当的值,如此示例.
As discussed in Concepts: Editors and Renderers, "the table invokes the table model's getColumnClass
method, which gets the data type of the column's cells." You should verify that your implementation of AbstractTableModel
returns a suitable value, as suggested in this example.
附录:
我正在尝试呈现一行,而不是一列.
I'm trying to render a row, not a column.
Rob Camick的 表行渲染 覆盖 prepareRenderer()
的方法似乎很合适.
Rob Camick's Table Row Rendering approach that overrides prepareRenderer()
seems 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);
}
这篇关于自定义TableCellRenderer不起作用(表行呈现)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!