Java - Swing - JTable - 设置所选行的颜色,但不设置单元格的颜色

2024-01-07

我试图让我的表格在您单击单元格时选择整行(可以通过关闭列选择来完成),但是,我不希望您单击的特定单元格周围的超厚边框突出显示。我希望这很容易,但显然它涉及渲染器,所以我做了很多研究,我能得到的最接近的是:

    JTable contactTable = new JTable(tableModel);

    contactTable.setCellSelectionEnabled(true);
    contactTable.setColumnSelectionAllowed(false);
    contactTable.setRowSelectionAllowed(false);
    contactTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    // This renderer extends a component. It is used each time a
    // cell must be displayed.
    class MyTableCellRenderer extends JLabel implements TableCellRenderer {
        // This method is called each time a cell in a column
        // using this renderer needs to be rendered.
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
            // 'value' is value contained in the cell located at
            // (rowIndex, vColIndex)

            if (isSelected) {
                // cell (and perhaps other cells) are selected

            }

            if (hasFocus) {
                // this cell is the anchor and the table has the focus
                this.setBackground(Color.blue);
                this.setForeground(Color.green);
            } else {
                this.setForeground(Color.black);
            }

            // Configure the component with the specified value
            setText(value.toString());

            // Set tool tip if desired
            // setToolTipText((String)value);

            // Since the renderer is a component, return itself
            return this;
        }

        // The following methods override the defaults for performance reasons
        public void validate() {}
        public void revalidate() {}
        protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {}
        public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}
    }

    int vColIndex = 0;
    TableColumn col = contactTable.getColumnModel().getColumn(vColIndex);
    col.setCellRenderer(new MyTableCellRenderer());

我从示例中复制了渲染器,仅更改了 hasFocus() 函数以使用我想要的颜色。设置颜色isSelected()什么也没做。

这段代码的问题是:

  1. 它仅适用于底部 vColIndex 指定的一列。显然,我希望将其应用于所有列,因此单击其中的一个单元格会突出显示整行。我可以创建一个 for 循环来将其更改为每个单元格,但我认为有一种更好的方法可以立即更改所有列的 cellRenderer。

  2. setForegroundColor()可以更改文本,但是setBackgroundColor()对细胞背景没有任何作用。我希望它能够像属性所暗示的那样真正改变背景颜色。

    • #2 的解决方案:使用this.setOpaque(true);在分配背景颜色之前。
  3. 当渲染器工作时,它仅在单个 Cell 上工作。如何让它为行中的所有单元格着色?

    • #3 的解决方案:我想出来了!而不是使用hasFocus(),如果启用行选择(table.setRowSelectionAllowed(true))然后你把颜色改变放在if(isSelected)陈述。然后整行被认为被选中,并且它为所有单元格着色!

3 是最重要的,但如果有人知道#1 或者可以向我解释为什么它被设计成一次只能将渲染器应用到一列,我将不胜感激。


太直接了,只需添加一行

tablename.setSelectionBackground(Color.red);

就我而言

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

Java - Swing - JTable - 设置所选行的颜色,但不设置单元格的颜色 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • Java实现累加器类,提供Collector

    A Collector具有三种通用类型 public interface Collector
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 如何在html页面中嵌入React组件

    我想构建一个像这样的 React 组件 class MyComponent extends React Component render return div This is a simple component div 并像这样使用它
  • 如何找到当前焦点的程序?

    我如何知道当前焦点是哪个进程 编辑 Windows 操作系统 从 XP 到 7 Call GetForegroundWindow http msdn microsoft com en us library windows desktop m
  • Entity Framework 4.3 迁移移动现有数据

    我正在使用 EF Code First 4 3 迁移来更新我的数据库方案 现在我遇到以下情况 需要删除表A 必须创建表B 并且必须将表A的数据 以及一些其他数据 复制到表B 我无权访问DbContext in the DbMigration
  • 如何在 Spring Boot 项目的调试/运行时在 IntelliJ“out”目录中生成 build-info.properties?

    在我的 build gradle 中 我添加了 spring 构建信息 springBoot mainClass springBootMainClass buildInfo additionalProperties name appName
  • 自定义 HashMap 实现

    这个问题是在一次采访中问我的 我认为获得最佳解决方案的唯一方法是 SOF 所以问题是 如何在java中实现自定义HashMap 假设没有称为HashMap的数据结构 我能想到的唯一答案是实现关联数组 但话又说回来 Java 没有关联数组 对
  • 关闭 Eclipse / Aptana 中的工具提示

    我不知道是否有人注意到 Eclipse 有这个烦人的功能 它需要在悬停任何东西时显示无用的工具提示 我想知道是否有人知道一种方法可以完全消除 Eclipse Aptana 中的所有工具提示行为 Thanks 我在 Window gt Pre
  • 无法链接到 libgfortran.a [重复]

    这个问题在这里已经有答案了 我的系统和文件上安装了 gfortranlibgfortran a可以在以下位置找到 usr lib gcc x86 64 linux gnu 4 6 Using nm我确定该功能 gfortran compar
  • 从两个列表中删除一个元素

    我有 list a 和 list b 这两个列表都有订单中的项目 每次我在 list b 中遇到 0 时 我想从 list a AND list b 中删除与该索引关联的条目 我不知道该怎么做 Before modification lis
  • 长型64位linux

    非常简单的问题 伙计们 但也许我只是忘记了一些事情 在64位linux中 long是8字节正确吗 如果是这种情况 并且我想设置第 64 位 我可以执行以下操作 unsigned long num 1 lt lt 63 然而 每当我编译这个时
  • Eclipse ADT 捆绑包链接在哪里? [复制]

    这个问题在这里已经有答案了 在 Android 开发的官方网站上 我无法再看到 Eclipse ADT 捆绑包的链接 我无法切换到 Android Studio 因为我的框架当前是基于 Ant 的 而不是Gradle https en wi
  • 如何在 Flutter 中创建带圆角的模态底板?

    显示模态底部表不提供任何造型或装饰 我想创建类似 Google Tasks 底页的内容 更新于 2019 08 05 您现在可以使用默认值来完成此操作showModalBottomSheet现在支持添加的方法ShapeBorder并且bac
  • Jooq LocalDateTime 字段使用系统时区而不是会话时区

    我正在使用 jooq v3 11 9 访问以 UTC 时间运行的 MySQL 数据库 我使用生成的实体并使用 JSR 310 时间类型 我在配置中使用的选项
  • Spring 和 XSLT,字符编码

    我对 HTML 视图的正确字符集编码部分有疑问 JSP 文件中的 XSL 文件生成 html 数据库中的值编码正确 但表的静态标头包含错误的字符 例如 有一些标题名称为 伊米斯 纳兹维斯科 哈斯洛 普莱奇 但它会生成 Imi Nazwisk
  • 如何使用 Xaml 中的 SortDescriptions 对 TreeView 项目进行排序?

    我有一个清单Layers绑定到一个TreeView其中每个实例都有一个列表Effects 我通过 HierarchicalDataTemplate 向它们展示 该模板效果很好 但我正在尝试使用它们对它们进行排序SortDescription
  • 使用 JavaScript/JQuery 打开最大化新窗口的最快方法?

    什么是fastest打开新窗口的方法 最大化 使用与大多数浏览器兼容的 JavaScript 和 或 JQuery
  • 使用数据属性滚动到元素

    我试图弄清楚如何使用数据属性让元素滚动到与 ID 匹配的特定元素 而不是使用锚标记 这就是我正在做的事情 一旦用户单击按钮 它将显示内容并滚动到与数据属性匹配的特定元素 我似乎无法让它滚动 div class container div c
  • 在运行时动态组合 Boost.Spirit.Qi 规则(任意数量的替代方案)

    我想知道 Boost Spirit Qi 中是否有一种方法可以在运行时动态组合任意数量的规则 Boost Spirit 的内部工作原理对我来说仍然有点神秘 但由于规则是作为对象实现的 所以它似乎是可行的 我的动机是使我的语法的某些部分易于扩
  • 通过 PHP 启动服务器端打印作业

    这很可能不是一件容易的事 但情况如下 我编写了一个 C 命令行应用程序 其中 使用 ITextSharp 创建 PDF 将其写入磁盘 uses Acrord32 exe 这是 Acrobat Reader 通过System Diagnost
  • 将bootloader和内核制作成iso? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何创建将内核加载到 iso 的简单引导加载程序 已经过去 5 天了 我在 google 中搜索并进行
  • Java - Swing - JTable - 设置所选行的颜色,但不设置单元格的颜色

    我试图让我的表格在您单击单元格时选择整行 可以通过关闭列选择来完成 但是 我不希望您单击的特定单元格周围的超厚边框突出显示 我希望这很容易 但显然它涉及渲染器 所以我做了很多研究 我能得到的最接近的是 JTable contactTable