【发布时间】:2015-04-02 22:05:19
【问题描述】:
我想要一个带有多行文本的复选框,有时我想禁用它。
- 简单的 JCheckBox 可以正常工作并被禁用,但它不是多行的。
- 放置 line1
line2 提供了正确的大小和布局,但是当我禁用控件时,只有复选框本身变灰,文本保持黑色。 - 我知道我可以将 HTML 文本颜色更改为灰色,但这不适用于“经典 Windows”外观,其中禁用的文本应呈现为“凹陷”。或者,实际上,它会起作用,但外观会与附近的其他禁用控件不同,这不好。
- 我可以创建一个简单的 JCheckBox,其中包含第一行文本和带有第二行的 JLabel,并同时禁用它们,但单击第二行(JLabel)不会激活复选框,单击复选框会显示键盘只关注让用户感到困惑的第一行。
是否可以将复选框及其标签作为单独的控件并在它们之间建立某种链接,就像在 HTML 中一样?也许我可以用这个做点什么。
是否可以继承 JButton 并覆盖其中的某些内容,例如,更改焦点矩形的绘制方式?该矩形由 com.sun.java.swing.plaf.windows.WindowsButtonUI 绘制,但我有点害怕继承该类,因为它在标准库中太深了,我的应用程序可能会因新的 JRE 而中断。
EDIT 04.02.2015:以上适用于 Java 1.6。在 Java 1.7 及更高版本中,禁用多行复选框会改变其外观,但它看起来仍与禁用的单行复选框不同;特别是在经典 Windows 主题上,文本不会凹陷。
(来源:keep4u.ru)
【问题讨论】:
-
你应该创建你自己的类,继承 JPanel 或 JCheckBox(两者都有优点)并通过你自己的组件实现你想要的功能
-
是否可以将复选框及其标签作为单独的控件并在它们之间建立某种链接,就像在 HTML 中一样? == JCheckBox with JLabel,编辑需要使用文本对齐(API 中的一些方法)
-
@mKorbel,不幸的是它不像在 HTML 中那样工作:鼠标单击标签不会激活复选框。显然这个功能只对辅助功能有用。