【发布时间】:2010-06-29 07:31:49
【问题描述】:
以下面的示例代码为例。 Swing 中有一些错误,如果组件包含 HTML,它不会将禁用的组件呈现为禁用。除了报告这个问题(我希望同事已经解决了)之外,还有什么好的方法可以解决这个问题吗?
无论我采用什么解决方案,我都希望它是一个全局修复,而不是需要侵入应用程序中的每个复选框的东西。
我尝试为在绘画前后调用 setForeground 的复选框制作自定义 UI,但事实证明,通过调用 setForeground,它会触发一个事件,最终导致它调用 repaint(),它调用渲染器,...
import java.awt.GridLayout;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class TestCheckBoxes extends JFrame
{
public TestCheckBoxes()
{
JCheckBox checkBox1 = new JCheckBox("Enabled, plain text");
JCheckBox checkBox2 = new JCheckBox("<html><p>Enabled, HTML");
JCheckBox checkBox3 = new JCheckBox("Disabled, plain text");
checkBox3.setEnabled(false);
JCheckBox checkBox4 = new JCheckBox("<html><p>Disabled, HTML");
checkBox4.setEnabled(false);
setLayout(new GridLayout(4, 1));
for (JCheckBox checkBox : Arrays.asList(checkBox1, checkBox2, checkBox3, checkBox4))
{
checkBox.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
add(checkBox);
}
((JComponent) getContentPane()).setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
pack();
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
TestCheckBoxes frame = new TestCheckBoxes();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
【问题讨论】:
-
您想要 HTML 的任何具体原因?从上面的sn-p,我找不到任何东西。
-
这只是复制问题的一个最小示例。真正的应用程序有一个粗体字来强调它,因为有两个看起来非常相似的复选框并排。
标签: java swing user-interface checkbox