【问题标题】:How do I modify a look and feel system class such as com.sun.java.swing.plaf.windows.WindowsTableHeaderUI如何修改外观系统类,例如 com.sun.java.swing.plaf.windows.WindowsTableHeaderUI
【发布时间】:2022-02-04 16:15:38
【问题描述】:

我需要对这个类进行更改,我无法以正常方式进行子类化。所以我可以修改 java 文件(或制作它的副本),但是如何让我的 Swing 应用程序使用这个版本而不是 Java 运行时提供的版本?

我要做的是复制 com.sun.java.swing.plaf.windows.WindowsTableHeaderUI 并修复它,所以我不能只创建类的副本并将其放入我自己的 pacakage 层次结构中我无法访问该类中提到的许多类(例如 XPStyle),那么如何替换系统类?

【问题讨论】:

  • 请展示你到目前为止所做的尝试。
  • 我已经解决了我需要做的事情来解决我的问题stackoverflow.com/questions/70976649/… 但我不知道该怎么做,这就是我问这个问题的原因

标签: java swing look-and-feel


【解决方案1】:

所以我得到它的工作如下:

  1. git 克隆https://github.com/AdoptOpenJDK/openjdk-jdk11.git

  2. 将以下文件从 src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows - WindowsTableHeaderUI.javaTMSchema.javaXPStyle.java 复制到我的代码树中

  3. 修改了这三个文件的 package 语句以匹配它们已放置的位置

  4. 添加以下内容以允许找到内部类

    --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

  5. 允许类编译的一些小改动

  6. 实现了我对 WindowsTableHeaderUI 类的修复

  7. 在应用程序中使用,但仅在 Windows 上使用

     if(Platform.isWindows())
     {
          UIManager.put("TableHeaderUI","com.jthink.jaikoz.tablerenderer.windows.WindowsTableHeaderUI");
     }
    
  8. 在 MacOS/Linux 等其他平台上构建时,我会删除 windows java 文件(WindowsTableHeaderUI.javaTMSchema.javaXPStyle.java),因为我们只在 Windows 上使用这些类来允许构建代码。

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多