Java Swing JTextPane文本/ html不遵循禁用的属性
来源:爱站网时间:2021-09-16编辑:网友分享
我正在尝试在JTextPane中显示一个简单的HTML页面。该页面具有输入复选框/无线电元素,但需要将其禁用。但是,显示页面时,复选框和单选按钮...
问题描述
我正在尝试在JTextPane中显示一个简单的HTML页面。该页面具有输入复选框/无线电元素,但需要将其禁用。但是,显示页面时,复选框和单选按钮仍处于启用状态。我不希望用户能够单击并更改其状态。这是一个错误还是我做错了什么。请帮忙。这是示例代码:
import javax.swing.*;
public class JEPTest {
public static void main(String[] args) throws Exception{
String data = "\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"";
final JEditorPane textPane = new JEditorPane();
textPane.setContentType("text/html");
textPane.setEnabled(false);
JScrollPane paneScrollPane = new JScrollPane(textPane);
paneScrollPane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
paneScrollPane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//paneScrollPane.setPreferredSize(new Dimension(250, 155));
paneScrollPane.setMinimumSize(new Dimension(100, 100));
JButton jb = new JButton("set");
jb.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
textPane.setText(data);
}
}
);
JFrame jf = new JFrame();
jf.setSize(800, 600);
jf.getContentPane().add(textPane, BorderLayout.CENTER);
jf.getContentPane().add(jb, BorderLayout.SOUTH);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
思路:
Swing使用仅支持HTML 3.2的旧HTML呈现引擎。 The HTML 3.2 specification显示在该版本时元素不允许使用
disabled
属性。定义的属性为:
最好的解决方法是避免使用JEditorPane,而只是在JPanel中创建JCheckBox实例。
或者,您可以使用元素将任何可视Java Bean(包括所有JComponent后代)嵌入到JEditorPane的HTML文档中。在javax.swing.text.html.ObjectView文档中对此进行了描述。
您可以使用此功能直接嵌入JRadioButton。但是,只能通过这种方式设置String属性,因此您将必须创建自己的JRadioButton子类,并添加一个包装enabled
属性的String属性:
public class JEPTest {
public static class StringPropRadioButton
extends JRadioButton {
private static final long serialVersionUID = 1;
public String getEnabledAsString() {
return String.valueOf(isEnabled());
}
public void setEnabledAsString(String enabled) {
setEnabled(Boolean.parseBoolean(enabled));
}
}
public static void main(String[] args) throws Exception{
String data = "\n" +
"\n" +
"\n" +
"\n" +
"\n" +
"" +
"" +
"\n" +
"";
上一篇:带有AlertDialog的问题
下一篇:我对PDF文件感到困惑