gpt4 book ai didi

java - 尝试为 JTable 中的特定单元格着色... getTableCellRendererComponent 覆盖

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:32 27 4
gpt4 key购买 nike

所以我知道这可能是一个重复的问题,但我已经浏览了这里已经存在的许多问题,但似乎没有一个对我有用,所以我想我应该发布自己的问题,希望其他一些遇到此问题的人也会发现这很有帮助。

这是我的代码

    table.getColumn("Name").setCellRenderer(
new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText(value.toString());

if (row==3)
{
setForeground(Color.RED);
}
return this;
}
}
);

这是 JFrame 中显示的内容。正如您所看到的,我试图只为“名称”列第三行中的文本着色,但它为整行着色。 enter image description here

有什么建议吗?谢谢!迦南

最佳答案

“名称”列的渲染是唯一的。当行为 3 时,您将红色设置为前景色,但您没有为其他行重置它,因此当调用画家时,它总是绘制红色。当行数为 3 时,您必须设置红色,但在其他情况下,您还必须重置原始颜色。

编辑:执行版本。现在原始的前景色被备份,并且使用 super 来像其他列一样渲染。

           table.getColumn("Name").setCellRenderer(
new DefaultTableCellRenderer() {

Color originalColor = null;

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (originalColor == null) {
originalColor = getForeground();
}
if (value == null) {
renderer.setText("");
} else {
renderer.setText(value.toString());
}

if (row == 3) {
renderer.setForeground(Color.RED);
} else {
renderer.setForeground(originalColor); // Retore original color
}
return renderer;
}
});

关于java - 尝试为 JTable 中的特定单元格着色... getTableCellRendererComponent 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40768651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com