Java 自定义TableCellRenderer不工作(表行呈现)

Java 自定义TableCellRenderer不工作(表行呈现),java,swing,jtable,cellrenderer,Java,Swing,Jtable,Cellrenderer,我试图渲染我的jtable的一行(它应该有不同的背景色,并且应该有粗体字符) 我发现了几个关于如何实现自定义TableCellRenderer(和)以及教程和本教程()的问题 我正在使用JInternalFrame来显示JTable。我尝试实现这两种解决方案,但没有调用getCellRenderer或prepareRenderer。调试时,我可以看到新的jtable被创建,但是方法中的断点没有被调用 我的代码如下所示: this.add(createData(model)); private

我试图渲染我的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()
查看是否发生了什么,但什么也没发生

我还试图在我的JInternalFrame中放入一个JPane,然后他们将JScrollPane添加到其中,但也没有发生任何事情

有什么帮助吗

蒂亚

Bob

如中所述,“表调用表模型的
getColumnClass
方法,该方法获取列单元格的数据类型。”您应该验证
AbstractTableModel
的实现是否返回了一个合适的值,如本文所述

增编:

我试图渲染一行,而不是一列

罗布·卡米克(Rob Camick)压倒一切的方法似乎是恰当的

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);
}

你发布的代码看起来不错。但是,我们不知道您实际如何使用此代码的上下文。因此,您的第一项工作是使用DefaultTableModel创建一个SSCCE(),看看是否可以让代码正常工作。如果没有,请发布整个15行SSCCE程序,以便我们可以确切地看到您正在做什么。一旦成功,您可以尝试使用自定义的TableModel。