更改 JTable 中单元格的颜色

2023-11-30

我想更改 JTable 中单元格的颜色。我编写了自己的类来扩展 DefaultTableCellRenderer。然而,我的班级确实有不一致的行为。它所做的只是,如果某个条目在一列中出现两次,则会将其标记为红色。这是我得到的结果:

enter image description here

请注意,在此类中我还设置了特定列的字体。效果很好。我想知道为什么在尝试简单地设置颜色时会出现这种行为。

这是我的课程:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package inter2;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

/**
 * Used to display different fonts for different cells in the table
 */
public class CustomCellRenderer extends DefaultTableCellRenderer
{

    private final int TRANSLATION_COL = 1;
    private final int VARIABLE_COL = 2;

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column)
    {
        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        //set it so it can display unicode characters
        if (column == TRANSLATION_COL)
        {
            cell.setFont(new Font("MS Mincho",Font.PLAIN, 12));
        }
        //marks a cell red if it is a duplicate variable name
        if(column == VARIABLE_COL)
        {
            MyTable theTable = (MyTable)table;
            String cellValue = theTable.getValueforCell(row, column);
            boolean dup = false;
            String[] columnData = theTable.getColumnData(column);
            //check if this is already in the list
            for(int i =0; i < columnData.length; i++)
            {
                String currTableValue = columnData[i];
                if(currTableValue.equals(cellValue) && i != row)
                {
                    dup = true;
                    break;
                }
            }
            //we found a dup
            if(dup == true)
            {
                cell.setBackground(Color.red);
            }
        }
        return cell;
    }
}


DefaultTableCellRenderer 是一个特别糟糕的实现 - 你会遇到它臭名昭著的“颜色记忆”。要解决此问题,您必须设置其颜色属性always

if (myCondition) 
    comp.setBackground(red)
else 
    comp.setBackground(normal)

或更好(当然,对我有偏见):在 Swing 中使用 JTable,它提供了对装饰单元格渲染器的完全可插拔支持,不仅在表格中,而且在组合框、树、列表中始终如一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 JTable 中单元格的颜色 的相关文章

随机推荐

  • Nodejs 在同一时间运行代码一次

    我想在特定时间运行我的流程 但只运行一次 我应该使用 cron 作业 执行然后停止作业还是使用 setTimeout 哪个更好 Update 我在node cron模块中找到了它 我认为这比使用 setTimeout 更好 另一个关于日期的
  • Sonata 管理导出字段和集合字段

    我正在尝试制作用于导出的自定义列 但我无法访问子项 有可能这样做吗 我此时的代码如下所示 public function getExportFields return ID gt id Transaction number gt trans
  • 如何在 MKMapView 中的 MKAnnotation 上设置图像

    我正在开发一个聊天应用程序 我必须在地图上显示所有朋友及其图像 请提供实施指导 我使用了以下代码 MKAnnotationView mapView MKMapView mapView viewForAnnotation id
  • Microsoft Ribbon 未在 Designer 中呈现

    我正在使用 Microsoft Ribbon for WPF System Windows Controls Ribbon 和 VS2015 由于我从项目中删除了不必要的依赖项 例如动态数据显示等 与功能区无关的东西 它不再在设计器中正确呈
  • 如何在 Android 的服务中运行 CountDownTimer?

    我想要一个运行 CountDownTimer 的服务 并且在每个刻度中我想在 Activity 中显示倒计时 并在一段时间间隔后播放声音 所有过程在单个活动中都进展顺利 但在来电期间倒计时不起作用 这就是我想使用服务来执行此操作的原因 有谁
  • 元素上的 CSS 过渡留下线条

    我在绝对定位的元素上放置了悬停过渡 悬停状态将框阴影应用于标题元素 以模仿它填充该区域 以避免无法从属性集转换为自动的事实 仅在 Chrome 中 当反转过渡时 背景图像上会留下一堆油漆线 如下图所示 左侧第二个图块应用了悬停状态 NOTE
  • 查找最大值并显示 MS Access 中不同字段的相应值

    所以我在 查找最大值并显示 SQL Server 中不同字段的相应值 但我想更进一步 我想获取每个 ID 和相应类型的最新日期 而不仅仅是所有条目的绝对最大值 有什么建议么 ID Type Date 1 Initial 1 5 15 1 P
  • 对于没有托管库存的 WooCommerce 变体显示“有库存”通知

    我需要针对特定 情况的帮助 在 WooCommerce 中 如果为简单产品或变体启用了 管理库存 则会在产品页面 gt 中显示通知 例如 此示例 1 但是 如果不启用 管理库存 那么就没有通知 我觉得很遗憾 因为即使我不管理库存数量 我仍然
  • Rstudio 闪亮可折叠侧面板

    我想最大化可用屏幕宽度mainPanel一个 Rstudio 闪亮的网页 在我的网页中 sidePanel用于选择参数以可视化结果mainPanel 我想知道如何才能最大限度地利用可用空间mainPanel 例如 我想要一个 折叠 展开 选
  • 为什么在 WebKit 上使用 :before height 时对齐标记列表不同?

    Code http jsbin com maropaxivo 1 edit html css 输出 请参阅 Firefox 和 Chrome 浏览器的示例代码 为什么对齐标记列表不同 li before height 20px conten
  • Toolstrip WinForms .Net Core 的问题

    我正在 Net Core 中制作一个 Winforms 应用程序来学习一些基本的东西 这是一个简单的应用程序 我将一些文本从文本框写入文件 基本上像记事本 现在我想添加一个带有工具条按钮的工具条来创建新文件和一个工具条按钮来将文本保存到文件
  • 在 Java 中使用 switch 的问题

    我不明白为什么它总是返回 arg1 的值 我正在建造一个重量转换器 public double convert double arg1 int arg2 int arg3 arg1 amount arg2 from arg3 to doub
  • signalR 中的第一个任意消息没有 messageID?

    我写了这个简单的代码 当连接时 应该产生 第一的 欢迎 3 条消息 计时器 这是代码 int i 0 protected override Task OnConnected IRequest request string connectio
  • 示例 Blazor 项目中的计数器状态可以在页面切换之间保留吗?

    在服务器端 Blazor 和 WebAssembly Blazor 项目的默认示例项目中 每次在页面之间移动时 计数器示例都会重置为 0 但是 在 ASP NET React 示例项目中 计数器不会在页面切换之间重置 有没有办法让像 Cou
  • 如何使用 kotlin 协程进行 Firestore 查询

    我创建了一个应用程序Kotlin and Firebase Firestore 现在我需要实现协程 因为主线程上有很多工作 但我也是一个初学者 所以这对我来说是新的东西 我看过一些关于此的教程 但没有找到完整的教程Firestore与协程
  • 隐藏多个div,默认显示1,并根据链接点击在它们之间切换(显示/隐藏)?

    我知道显示 隐藏的事情已经在堆栈上被覆盖得很厉害 但我只是找不到适合我的解决方案 抱歉 我已经尝试了几种我发现的 JS jQuery 解决方案 但无法完全让其中一个按照我想要的方式运行 我有许多内容非常相似的 div 内容根据所选版本略有变
  • Android GCM 服务器已发送但 GCM 未推送到设备

    我正在手机上测试 GCM 2 3 6 安卓 清单文件 MainActivity First 和 Second 活动不执行任何操作 它们用于其他测试目的 不会干扰 GCM
  • 无法使用 Netlify 和 Heroku 跨域设置/接收 cookie

    我遇到了无法在浏览器中设置 cookie 的问题 因为客户端托管在 Netlify 上 服务器托管在 Heroku 上 它在本地主机上运行良好 所以看起来它现在与跨域有关 阅读了多篇关于此的文章后 似乎这可能与 cors 或我如何设置 co
  • 矩阵的某些值没有出现在 Matplotlib 的图中

    我从 CSV 创建了一个空参考矩阵 将 x y 定位为矩阵上的一个位置 并将其打印出来 并将 100 指定为矩阵上的该位置 每个 x 都是 ref mass pandas 系列中的值 ref df pd read csv ref file
  • 更改 JTable 中单元格的颜色

    我想更改 JTable 中单元格的颜色 我编写了自己的类来扩展 DefaultTableCellRenderer 然而 我的班级确实有不一致的行为 它所做的只是 如果某个条目在一列中出现两次 则会将其标记为红色 这是我得到的结果 请注意 在