【发布时间】:2012-03-24 10:02:28
【问题描述】:
更新:
通过添加以下代码,我在此答案 here 中找到了部分解决方案:
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(new java.awt.Color(255, 72, 72));
return c;
}
}
然后将它传递给我的 JTable 对象:
jTable2.setDefaultRenderer(String.class, new CustomRenderer());
这可以正常工作,现在表格行是红色的:
我现在唯一需要知道的是如何将着色限制为单行和单个单元格。
经过进一步研究,我需要一个 setCellRender() 方法,以便我可以在特定单元格上设置自定义渲染,但此方法不存在。
问题:
我想创建一个逐步执行伪代码的可视化组件。
为此,我创建了一个 JTable,现在我正在寻找方法来突出显示每一行(或单元格,因为只有一列)以显示正在执行的行。
我在下面的最终 GUI 中包含了一个模型。正如您在 Pseudocode 面板中看到的那样,我突出显示了最后一行。
请忽略与问题无关的箭头。
我已经开始在 Netbeans Matisse 中实现模型(这是 3 种算法中的 1 种)。但是我不知道如何突出显示 JTable 组件中的单行 code line 1。
使用不同类型的组件会更容易吗?
稍后我还需要能够为单个单元格重新着色,如模型的 Table JPanel 中所示。如何实现?
【问题讨论】:
-
我可以在特定单元格上设置自定义渲染 - 不,这不是您需要的 :-) 相反,您需要一个自定义渲染器来决定其渲染的视觉效果组件基于传入getXXCellRendererComponent的参数,见fi docs.oracle.com/javase/tutorial/uiswing/components/table.html
-
我明白了。所以我将自定义渲染器设置为所有单元格,然后在自定义渲染器方法中检查哪个单元格需要突出显示?我仍然不知道如何在自定义渲染器方法中检查我所在的单元格。
-
我不明白你不明白的 ;-) 方法的参数告诉你所有你需要知道的。您确实阅读了我上面链接的教程,不是吗?
-
如果我在
getTableCellRendererComponent方法中执行条件语句 -if(column == 0 && row == 1) c.setBackground(new java.awt.Color(255, 72, 72));它仍然会将所有单元格涂成红色。
标签: java swing jtable jtextcomponent