自定义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

回到顶部