Java 通过自定义表格模型突出显示JTable中的单元格

Java 通过自定义表格模型突出显示JTable中的单元格,java,swing,jtable,tablemodel,tablecellrenderer,Java,Swing,Jtable,Tablemodel,Tablecellrenderer,我有一个JTable和一个JTextField,我想突出显示对应于JTextField中文本的单元格。我在代码中添加了Todo,但我不知道如何做 如何在表模型中实现这一点?有人能推荐一段代码吗 表格模型: TableModel当然不是实现此功能的地方。这属于渲染器。有关更多详细信息,请参阅 我投票决定将此问题作为or的副本来结束,or解释了如何实现此功能。与文本字段的耦合是唯一的新事物,这相当简单。在这些线程中参考kleopatra的答案,并给她更多的信任TableModel肯定不是这个功能的地

我有一个JTable和一个JTextField,我想突出显示对应于JTextField中文本的单元格。我在代码中添加了Todo,但我不知道如何做

如何在表模型中实现这一点?有人能推荐一段代码吗

表格模型:

TableModel当然不是实现此功能的地方。这属于渲染器。有关更多详细信息,请参阅

我投票决定将此问题作为or的副本来结束,or解释了如何实现此功能。与文本字段的耦合是唯一的新事物,这相当简单。在这些线程中参考kleopatra的答案,并给她更多的信任

TableModel肯定不是这个功能的地方。这属于渲染器。有关更多详细信息,请参阅


我投票决定将此问题作为or的副本来结束,or解释了如何实现此功能。与文本字段的耦合是唯一的新事物,这相当简单。参考kleopatra在这些线程中的答案,并给予她更多的信任

在我的问题中详细描述了两种可能的方式,包括,

在我的问题中详细描述了两种可能的方式,

如前所述,TableModel不适合此用途

而是覆盖。如果行数和列数相同,可以更改返回组件的背景色,因为显示通常为JLabel

下面是一个突出显示鼠标所在行的示例:

@Override
public Component prepareRenderer(final TableCellRenderer renderer, final int row, final int column) {
    final Component c = super.prepareRenderer(renderer, row, column);
    if (row == this.itsRow) {
        c.setBackground(Color.RED);
    }
    return c;
}
其中this.itsRow是由MouseMotionListener更新的int字段:


如前所述,TableModel不是进行此操作的合适位置

而是覆盖。如果行数和列数相同,可以更改返回组件的背景色,因为显示通常为JLabel

下面是一个突出显示鼠标所在行的示例:

@Override
public Component prepareRenderer(final TableCellRenderer renderer, final int row, final int column) {
    final Component c = super.prepareRenderer(renderer, row, column);
    if (row == this.itsRow) {
        c.setBackground(Color.RED);
    }
    return c;
}
其中this.itsRow是由MouseMotionListener更新的int字段:

我在代码中添加了Todo,但我不知道如何做。也许他们需要一个//放在这里什么?标签可能与我在代码中添加的Todo重复,但我不知道如何执行。也许他们需要一个//放在这里什么?标签可能重复的
@Override
public Component prepareRenderer(final TableCellRenderer renderer, final int row, final int column) {
    final Component c = super.prepareRenderer(renderer, row, column);
    if (row == this.itsRow) {
        c.setBackground(Color.RED);
    }
    return c;
}
this.addMouseMotionListener(new MouseMotionListener() {
        public void mouseMoved(MouseEvent e) {
            SubclassedJTable.this.itsRow = SubclassedJTable.this.rowAtPoint(e.getPoint());
            SubclassedJTable.this.repaint();
        }
        public void mouseDragged(MouseEvent e) {/***/}
    });