Java JTree:无论L&;如何修改外观;F
我有一个JTree,我正试图修改它,以便任何选定节点的实际选择区域将从JTree的最左侧延伸到JTree的最右侧 web上的大多数示例都谈到扩展BasicTreeUI。从这里,您只需修改确定选择区域的方法即可。然而,这将要求JTree——不管它在哪个平台上运行——将使用该实现。我将无法真正利用针对特定平台的各种UI实现,因为我总是使用BasicTreeUI(而不是Metal、Windows或Aquia实现)Java JTree:无论L&;如何修改外观;F,java,swing,jtree,look-and-feel,Java,Swing,Jtree,Look And Feel,我有一个JTree,我正试图修改它,以便任何选定节点的实际选择区域将从JTree的最左侧延伸到JTree的最右侧 web上的大多数示例都谈到扩展BasicTreeUI。从这里,您只需修改确定选择区域的方法即可。然而,这将要求JTree——不管它在哪个平台上运行——将使用该实现。我将无法真正利用针对特定平台的各种UI实现,因为我总是使用BasicTreeUI(而不是Metal、Windows或Aquia实现) 理想情况下,我希望能够采用目前安装在JTree上的BasicTreeUI的任何实现,并将
理想情况下,我希望能够采用目前安装在JTree上的BasicTreeUI的任何实现,并将其封装在我的自定义包装器中,该包装器扩展了BasicTreeUI。从那里,我将覆盖所有方法并委托给包装的UI,并在需要重新计算节点选择区域的地方实现一些方法。但是,BasicTreeUI上的大多数方法都受到保护, 所以我真的能做到
不知道该如何解决这个问题…欢迎提出任何想法 也许您可以覆盖
setUI
并将提供的UI包装到自定义树UI中,如下所示:
@Override
public void setUI(TreeUI ui) {
super.setUI(new MyCustomTreeUI(ui));
}
另一个要考虑的选项是在全局代码> uimaNaviger-<代码>中提供/设置树UI属性。我相信特定于平台的树UI将向全局
UIManager
请求属性值并相应地配置自己-也许您可以简单地执行类似UIManager.put(“tree.selectionWidth”,100)
“但是,BasicTreeUI上的大多数方法都受到保护”-如果它们受到保护,那么您可以覆盖它们,您的意思是私有
?谢谢您的建议。但是,它不会真正起作用,因为MyCustomTreeUI将无法覆盖所提供ui实例的所需方法,因为它们受到保护。具体来说,我希望修改BasicTreeUI#createNodeDimensions()中的任何维度方法,该方法确定节点大小。但您可以重写受保护的方法。如果无法向类所在的包中添加任何内容,您将如何重写受保护的方法?即使自定义类与超级类不在同一包中,您也可以重写受保护的方法。也许您将受保护的与包私有(即无访问修饰符)混淆了。