- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能找到的所有自定义示例 TableCellRenderer似乎都在扩展DefaultTableCellRenderer .我想这没什么不妥,除了您无法扩展当前外观的 TableCellRenderer
功能。这不好。您的 TableCellRenderer
将无法识别 L&F。
这正是我想要做的:我想创建一个自定义的TableCellRenderer
,它是 L&F 感知的,所以与其扩展 DefaultTableCellRenderer
,不如扩展(或decorate) L&F 为给定类类型默认安装的 TableCellRenderer
是什么。
我可以通过 myJTable.getDefaultRenderer(...) 来实现但这不会给我该类的新实例,它只会返回 L&F 的“主”表格单元格渲染器以用于该类型的类。我从一个创建自定义 TableCellRenderer 的解决方案开始,该解决方案包装了我从上述方法(有效地使用装饰器模式)获得的实例,直到我意识到我没有自己的渲染器私有(private)实例。如果我弄乱了渲染器的那个实例,我就无法进行特定于列的渲染,因为我对该实例所做的任何更改都会影响比预期更多的列。
因此我得出结论,我需要做的是为该类类型创建 L&F 的 TableCellRenderer
的全新实例。 (在我的例子中,class type = Object
)。我相信我可以从 UIManager
中的某处获取相关的类名,但我不知道该使用哪个键。其次 - 不幸的是 - 我相信我必须使用反射来实际实例化该 TableCellRenderer 类的对象。
我的假设是否正确,即不幸的是没有 TableCellRenderer 工厂?以及我实际上如何为类类型 Object
实例化当前 L&F 的 TableCellRenderer
的新实例? (我知道如何使用反射,如果那是唯一的方法的话)
您可能已经猜到,我正在使用专有 L&F 和标准 L&F 进行测试。这个特别专有的 L&F 安装了自己的 TableCellRenderer,这是完全合法的,IMO。 Java Synth L&F 也是如此。所以我不想将其作为特定 L&F 的问题。
测试:我创建了一个包含两个 String
列的表。我在其中一列上安装了自己的自定义单元格渲染器,但在另一列上没有安装。我的自定义渲染器如下所示:
public class CustomCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
如您所见,自定义渲染器什么也不做。因为它什么都不做,所以我应该在两个表列上获得相同的渲染效果。我不!原因当然是通过简单地扩展 DefaultTableCellRenderer
我不会“继承”L&F 自己的 TableCellRenderer 应该有一个/一些。在很多很多 L&F 上,上述测试实际上会以相同的方式呈现两列,但这更多是偶然的。我想以正确的方式做事。扩展 DefaultTableCellRenderer
对大多数 L&F 产生预期结果这一事实对我来说还不够。 :-)
最佳答案
我们这样解决了这个问题:
public class CustomCellRenderer implements TableCellRenderer {
//Use appropriate class here
private final TableCellRenderer defaultTableCellRenderer= new JTable().getDefaultRenderer(Object.class);
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component c = defaultTableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// do custom stuff to c here ...
return c;
}
}
如果您不为 TableCellRenderer 创建一个新实例,您会得到奇怪的效果,因为您更改了表的默认实例。
关于java - 如何创建可感知外观的 TableCellRenderer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27226232/
晚安,我正在与一些合作伙伴使用 javaFx 制作一个应用程序;我们的想法是它将在 Windows 和 Linux 中使用。我们进行了一些测试,发现应用程序在两种操作系统中的显示有所不同。 我们正在使
我有一项服务,可通过 CreateProcessAsUser 将可执行文件启动到用户 session 中,并在 STARTUPINFO 参数中指定桌面。它运行良好。 我的可执行文件没有显示出来,也没有
当每个文件写入集群时,HDFS 会创建一个复制管道。假设有两个 Rack 1 和 5。根据 Rack 感知,第一个 block 将被保存到 Rack 1,其他两个复制 block 将被插入 Rack
我正在做一个 Django 项目,我对时区感到困惑。 我有一个事件对象,它有 publish_start 和 publish_end 日期。 控制台输出示例; campaingObject.publi
我在下面有一个函数,它通过将字体 (.ttf) 复制到 Windows 字体文件夹然后触发 WM_FONTCHANGE 消息将其安装到 Windows 中。但是,该字体不会立即在 Windows 资源
是否有类似 grep 的 Unix/Linux 命令行工具可以理解由 log4j 或 logback 打印的日志文件中的 Java 堆栈跟踪?该工具应该理解堆栈跟踪由多行组成。 典型的用例是在查看存储
每次我在我的 SCM 中看到诸如导入或方法签名更改(例如变量的重命名)之类的冲突时,我想知道是否有类似语言感知的 diff/merge 方法可以处理更烦人的小更改发生在共享项目上。有什么东西可以在 U
我使用 astyanax 连接池定义如下: ipSeeds = "LOAD_BALANCER_HOST:9160"; conPool.setSeeds(ipSeeds) .setDiscoveryTy
据我所知,OCaml 中的字符串只是简单的字节序列。他们没有编码的概念。 这对于大多数用途来说都很好。但是,标准库的某些部分对以单字节字符集编码的字符串做出了假设,例如 printf 的对齐功能: #
据我所知,OCaml 中的字符串只是简单的字节序列。他们没有编码的概念。 这对于大多数用途来说都很好。但是,标准库的某些部分对以单字节字符集编码的字符串做出了假设,例如 printf 的对齐功能: #
我正在使用 this enhanced version of WebClient登录网站: public class CookieAwareWebClient : WebClient {
我正在尝试将 Awareness API 集成到一个新项目中,但我遇到了一条错误消息:ACL_ACCESS_DENIED 状态代码:7503。 我也在其他项目中集成了 Awareness API,但上
有什么方法可以定义一个 spring bean,当 session 中的数据发生变化时,它会得到通知? 如果可能的话,我还想知道纯 Java 解决方案。我想要的只是当我在 httpsession 中添
有没有方便有效的方式以 NUMA 感知方式使用 cpp 标准容器 API? 我想在 cpp 环境中执行 OpenMP 并行稀疏矩阵 vector 乘法。要分配和初始化与 NUMA 域有关的 vecto
我正在创建一个程序,它使用 SetWindowPos() 从另一个进程移动/调整窗口大小。我自己的程序是 PROCESS_PER_MONITOR_DPI_AWARE。其他程序可以是 PROCESS_D
我一直在研究许多 JDBC 连接池,但我有一个特定的要求,即池需要是 JTA 感知的,这给我留下了 Apache DBCP 和 OW2 XAPool 的简短列表。我查看的其他池(c3p0、Proxoo
我有一个 php 脚本,可以在服务器上发出一系列请求。第一个请求将是登录请求。 问题是 file_get_contents 似乎每次都创建一个新 session ,那么我怎样才能让它感知 sessio
我有一个整数,表示 unix 纪元之后的微秒数。 (格林威治标准时间) 如何使用 astype 将 1349863207154117 转换为 pandas.Timestamp("2012-10-10T
我有一个 Web 服务,我正在尝试将变量 Autowiring 到其中。这是类(class): package com.xetius.isales.pr7.service; import java.u
再会! 我已经在 WPF 应用程序上工作了一段时间(作为一种学习体验,哦,天哪,这是一种学习体验),它终于可以发布了。发布意味着将其安装在我的 HTPC 上,用于浏览我的电影收藏。 我在运行 1920
我是一名优秀的程序员,十分优秀!