Java外观 - 如何打破对sun.swing.SwingUtilities2的依赖

18

我正在维护一些使用自定义外观的Java代码。最近由于其他原因升级了Java版本,但发现由于字段未找到,外观遭到破坏。

sun.swing.SwingUtilities2.BASICMENUITEMUI_MAX_TEXT_OFFSET;

这段代码是基于 Java 6u02 的 BasicMenuItemUI.layoutMenuItem() 类实现的(源代码在此处)。我发现 Oracle 在新版本 Java 6u31 中重构了他们的代码,引入了一个名为 MenuItemLayoutHelper 的类。

虽然我可以使用 MenuItemLayoutHelper,但这并不能解决问题,只是将问题推迟到下一次 Java 内部结构被更改的时候。因此,我将其排除为解决方案。

我想请教如何实现类似于 BasicMenuItemUI 的从左到右的布局,而不需要知道父级的最大文本偏移量(消除对 sun.swing.SwingUtilities 的不良依赖)。


17
可能无法选取介绍该依赖项的人,将她锁在房间里直到问题解决 :-) 到最后,除了抄袭..咳咳..我是说查看源代码并实现重构版本之外,没有太多可做的了。 - kleopatra
9
@kleopatra 我妈妈警告我不要“看太阳”。(沉思)她没有提到“代码”... - Andrew Thompson
哎呀……这是执行构建时间代码规范的典范。 - Gus
7
基本上你想在没有Java代码依赖的情况下使用Java代码。简短回答:不可能。预计新版本的Java会有新代码和重构。你必须改变你的想法。 - albfan
2个回答

4
正如albfan所说,你不能这样做。你必须依赖于代码,复制类并在你的程序中使用它,或者根本不使用它并使用第三方库,或者不使用该功能。

2

好的,也许已经有一段时间了,但我发现只要在有问题的代码中始终使用自己的常量,而不是sun.swing.SwingUtilities2.BASICMENUITEMUI_MAX_TEXT_OFFSET,就可以解决问题。这绝不是一个理想的解决方案。

好处是来自sun软件包的错误导入已经进入了编码规则检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接