【发布时间】:2012-09-05 09:40:47
【问题描述】:
我有一个程序,其中包含很多JDialogs、JFileChoosers 和其他包含JButtons 的组件。
我知道我可以从 JButton 转到 JButton 并设置 .focusPainted(false) 以使焦点不可见,但问题是我有一堆“自动”创建的组件(预定义的 JDialogs、JFileChoosers),而我无权访问他们的 JButton。我必须手动创建整个组件才能控制它们的子组件(并且从头开始创建 fileChooser 非常困难)......
不过,我有一个想法。每次创建 JButon 时,focusPainted 默认设置为 true。有没有办法我可以找到包含原始 JButton 构造函数的 Java 库并将方法更改为 false ,使其成为默认值?
编辑:我找到了 src.zip 并提取了 AbstractButton.java。如何编辑和重新编译它?
其实问题是,如何编辑Java标准库?
附:你们所有人都说这不是一个好习惯,这个特定的例子可能会出现什么问题(我认为JSL中的任何内容都取决于焦点是否画在Jbutton上)?而且我总是可以同时处理两个项目,一个带有原始库,一个带有已编辑的库,当我在一个中出错但在另一个中没有出错时,我知道问题出在哪里。
【问题讨论】:
-
你为什么要迷惑你的用户?
-
我经常看到有关对抗 L&F 和默认行为的问题:这是一种不好的做法!平台 L&F 尽可能模拟平台的默认 L&F,以便用户享受与任何其他应用程序类似(如果不完全一样)的实验。问问自己:“为什么我要违背用户的期望?”
-
您的应用程序是多平台的,或者更准确地说,它是使用不同的外观 (L&F) 还是只使用一种?在后一种情况下,您似乎需要继承 L&F 并禁用焦点矩形的渲染;然后,让应用程序在启动时加载您自定义的 L&F。不过,我自己从来没有做过。
-
我可以只禁用对默认 Java L&F 的关注吗?我必须承认它看起来相当丑陋。这主要是审美问题。不过,关注其他 L&F 可能看起来更好(但我想让用户在 L&F 之间进行选择)......
标签: java swing jbutton standard-library