如何修改外观系统 class 例如 com.sun.java.swing.plaf.windows.WindowsTableHeaderUI
How do I modify a look and feel system class such as com.sun.java.swing.plaf.windows.WindowsTableHeaderUI
我需要对这个 class 进行更改,我没有办法以正常方式仅 subclass。所以我可以修改 java 文件(或制作它的副本)但是如何让我的 Swing 应用程序使用这个版本而不是 Java 运行时提供的版本?
我想做的是复制 com.sun.java.swing.plaf.windows.WindowsTableHeaderUI 并修复它,所以我不能只创建 class 的副本并将其放入我自己的 pacakage 层次结构中,因为我不这样做可以访问 class 中提到的许多 classes(例如 XPStyle),那么我该如何替换系统 class?
所以我按如下方式工作:
-
将以下文件从 src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows - WindowsTableHeaderUI.java
、TMSchema.java
、XPStyle.java
复制到我的代码树中
修改了这三个文件的包声明以匹配它们的放置
添加以下内容以允许找到内部 classes
--add-exports java.desktop/sun.awt.windows=ALL-UNNAMED
--add-exports java.desktop/sun.awt.image=ALL-UNNAMED
--add-exports java.desktop/sun.swing.table=ALL-UNNAMED
--add-exports java.desktop/sun.swing=ALL-UNNAMED
--add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED
--add-exports java.base/sun.security.action=ALL-UNNAMED
一些小改动以允许 classes 编译
实现了我对 WindowsTableHeaderUI 的修复 class
在应用程序中使用,但仅在 Windows 和
上使用
if(Platform.isWindows())
{
UIManager.put("TableHeaderUI","com.jthink.jaikoz.tablerenderer.windows.WindowsTableHeaderUI");
}
在 MacOS/Linux 等其他平台上构建时,我删除了 windows java 文件(WindowsTableHeaderUI.java
、TMSchema.java
、XPStyle.java
) 因为我们只在 Windows 上使用这些 classes 来构建代码。
我需要对这个 class 进行更改,我没有办法以正常方式仅 subclass。所以我可以修改 java 文件(或制作它的副本)但是如何让我的 Swing 应用程序使用这个版本而不是 Java 运行时提供的版本?
我想做的是复制 com.sun.java.swing.plaf.windows.WindowsTableHeaderUI 并修复它,所以我不能只创建 class 的副本并将其放入我自己的 pacakage 层次结构中,因为我不这样做可以访问 class 中提到的许多 classes(例如 XPStyle),那么我该如何替换系统 class?
所以我按如下方式工作:
将以下文件从 src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows -
WindowsTableHeaderUI.java
、TMSchema.java
、XPStyle.java
复制到我的代码树中修改了这三个文件的包声明以匹配它们的放置
添加以下内容以允许找到内部 classes
--add-exports java.desktop/sun.awt.windows=ALL-UNNAMED
--add-exports java.desktop/sun.awt.image=ALL-UNNAMED
--add-exports java.desktop/sun.swing.table=ALL-UNNAMED
--add-exports java.desktop/sun.swing=ALL-UNNAMED
--add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports java.base/sun.security.action=ALL-UNNAMED
一些小改动以允许 classes 编译
实现了我对 WindowsTableHeaderUI 的修复 class
在应用程序中使用,但仅在 Windows 和
上使用if(Platform.isWindows()) { UIManager.put("TableHeaderUI","com.jthink.jaikoz.tablerenderer.windows.WindowsTableHeaderUI"); }
在 MacOS/Linux 等其他平台上构建时,我删除了 windows java 文件(
WindowsTableHeaderUI.java
、TMSchema.java
、XPStyle.java
) 因为我们只在 Windows 上使用这些 classes 来构建代码。