当前位置: 首页 > 面试题库 >

自定义TableCellRenderer不起作用(表行呈现)

陶元凯
2023-03-14
问题内容

我正在尝试呈现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);
}


 类似资料:
  • 字体始终显示默认字体。 我的字体存储在资源/字体中。我尝试使用其他字体,并对字体进行重新编码。此外,PixlUI库并没有解决这个问题。 主要活动。Java语言 activity\u main。xml

  • 这应该很简单。我修改了项目的web.xml,以便显示我自己的500错误页面: 然后我写了最简单的servlet来测试它: 然后完全忽略自定义页面(位于根目录),而是获得默认的 Tomcat 错误页面。 我使用的是MyEclipse调试器附带的Tomcat 6版本。我已经三重检查了拼写错误,但我找不到任何异常。我想知道错误页面标签是否需要在文档的某个部分。有谁知道可能出了什么问题? *编辑:这是请求

  • 我在Angular中有一个自定义验证的表单构建器,但我在自定义验证中读取文件后无法获取文件的类型。 下面是StackBlitz: https://stackblitz.com/edit/Angular-ivy-atwqqc?file=src%2fapp%2fapp.component.ts TS文件

  • 问题内容: 我已经创建了一个UserType(请参见下文)来处理mySQL数据库中的一种情况,在该情况下我们将空日期保存为0000-00-00 00:00:00。 当我尝试使用dispDT的null持久化我的实体时(请参见下文),它将生成以下异常:“ javax.persistence.PersistenceException:org.hibernate.PropertyValueExceptio

  • 我正在尝试设置Oracle Forms,以便从两个不同的目录交付两个表单。为此,我将表格放在以下位置 APP1:/oracle/weblogic/middleware/as_1/forms_APP1 APP2:/oracle/weblogic/middleware/as_1/forms_APP2 然后将“formsweb.cfg”文件设置为“app1”和“app2”使用2个环境文件。在app1中。

  • 我已经在带有TableCellRenderer的JTable中添加了一个带有JLabel的图片。但是,当鼠标移动到单元格上时,如何在特定的列和行上为JLabel添加边框呢? 这是第一个呈现器类: 这是第二个呈现器类: 这就是我在JTable中设置鼠标输入和鼠标单击的方式: 但当鼠标移动到第6列的一个单元格时,这会为该列中的所有单元格添加一个边框。当鼠标进入特定的行和列时,如何将它只变成特定的行和列