Java Swing CSS样式属性";“类”;在HTMLEditorKit/HTMLDocument中使用
我的问题如下:Java Swing CSS样式属性";“类”;在HTMLEditorKit/HTMLDocument中使用,java,swing,htmleditorkit,Java,Swing,Htmleditorkit,我的问题如下: class HtmlEditor extends JFrame implements Keylistener, MouseListener { private HTMLDocument m_doc; private HTMLEditorKit m_kit; [...] public HtmlEditor(...) { [...] final URL formats = HtmlEditor.class.getResource("/formats.cs
class HtmlEditor extends JFrame implements Keylistener, MouseListener {
private HTMLDocument m_doc;
private HTMLEditorKit m_kit;
[...]
public HtmlEditor(...) {
[...]
final URL formats = HtmlEditor.class.getResource("/formats.css");
predefStyles = new StyleSheet();
predefStyles.importStyleSheet(formats);
m_kit.getStyleSheet().addStyleSheet(predefStyles);
[...]
}
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
cbStyles = new JComboBox<String>(getStyleNames());
cbStyles.setToolTipText("Select Style");
cbStyles.setMaximumSize(null);
cbStyles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currStyle = cbStyles.getSelectedItem().toString();
final SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(HTML.Attribute.CLASS, currStyle);
m_kit.getInputAttributes().addAttributes(attr);
m_editor.requestFocusInWindow();
}
});
m_toolBar.add(cbStyles);
我正在尝试向已实现的HTML编辑器添加功能
在JavaSwing中使用HTMLEditorKit和HTMLDocument类。想法
是为了提供一种在测试期间在不同样式之间切换的可能性
在HTML编辑器中编辑文本。不同的样式定义
背景/前景颜色、字体等
我已经通过编程方式加载了样式表文件。代码
其结果如下:
class HtmlEditor extends JFrame implements Keylistener, MouseListener {
private HTMLDocument m_doc;
private HTMLEditorKit m_kit;
[...]
public HtmlEditor(...) {
[...]
final URL formats = HtmlEditor.class.getResource("/formats.css");
predefStyles = new StyleSheet();
predefStyles.importStyleSheet(formats);
m_kit.getStyleSheet().addStyleSheet(predefStyles);
[...]
}
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
cbStyles = new JComboBox<String>(getStyleNames());
cbStyles.setToolTipText("Select Style");
cbStyles.setMaximumSize(null);
cbStyles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currStyle = cbStyles.getSelectedItem().toString();
final SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(HTML.Attribute.CLASS, currStyle);
m_kit.getInputAttributes().addAttributes(attr);
m_editor.requestFocusInWindow();
}
});
m_toolBar.add(cbStyles);
样式表文件如下所示:
class HtmlEditor extends JFrame implements Keylistener, MouseListener {
private HTMLDocument m_doc;
private HTMLEditorKit m_kit;
[...]
public HtmlEditor(...) {
[...]
final URL formats = HtmlEditor.class.getResource("/formats.css");
predefStyles = new StyleSheet();
predefStyles.importStyleSheet(formats);
m_kit.getStyleSheet().addStyleSheet(predefStyles);
[...]
}
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
cbStyles = new JComboBox<String>(getStyleNames());
cbStyles.setToolTipText("Select Style");
cbStyles.setMaximumSize(null);
cbStyles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currStyle = cbStyles.getSelectedItem().toString();
final SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(HTML.Attribute.CLASS, currStyle);
m_kit.getInputAttributes().addAttributes(attr);
m_editor.requestFocusInWindow();
}
});
m_toolBar.add(cbStyles);
将该样式表添加到HTMLEditorKit实例的样式表中
我已经可以在将内容插入HTML时使用样式了
编辑器使用其源编辑器(在源编辑器中可以插入
HTML代码,例如“样式化文本”)。
为了允许使用所见即所得部分中的样式,我添加了一个
JComboBox进入编辑器的工具栏,该工具栏显示
样式名称中的“formats.css”(前导“.”中的样式为
删除)。在JComboBox的ActionListener中,我现在尝试设置
“类”属性。我的代码如下所示:
class HtmlEditor extends JFrame implements Keylistener, MouseListener {
private HTMLDocument m_doc;
private HTMLEditorKit m_kit;
[...]
public HtmlEditor(...) {
[...]
final URL formats = HtmlEditor.class.getResource("/formats.css");
predefStyles = new StyleSheet();
predefStyles.importStyleSheet(formats);
m_kit.getStyleSheet().addStyleSheet(predefStyles);
[...]
}
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
cbStyles = new JComboBox<String>(getStyleNames());
cbStyles.setToolTipText("Select Style");
cbStyles.setMaximumSize(null);
cbStyles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currStyle = cbStyles.getSelectedItem().toString();
final SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(HTML.Attribute.CLASS, currStyle);
m_kit.getInputAttributes().addAttributes(attr);
m_editor.requestFocusInWindow();
}
});
m_toolBar.add(cbStyles);
正如我们在这里看到的,类StyleConstants用于设置
属性设置为新字体。让我困惑的是
StyleConstants类似乎没有提供设置
“类”属性。从它的Javadoc中可以看出,有许多
设置对齐、字体系列、粗体等属性的方法,
等
很可能我的方法很简单,是不正确的。也许是我
尚未正确理解在应用程序中使用CSS的概念
HTMLDocument。
任何帮助都将不胜感激
根据我对HTML的理解,CSS的使用方法如下:
class HtmlEditor extends JFrame implements Keylistener, MouseListener {
private HTMLDocument m_doc;
private HTMLEditorKit m_kit;
[...]
public HtmlEditor(...) {
[...]
final URL formats = HtmlEditor.class.getResource("/formats.css");
predefStyles = new StyleSheet();
predefStyles.importStyleSheet(formats);
m_kit.getStyleSheet().addStyleSheet(predefStyles);
[...]
}
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
cbStyles = new JComboBox<String>(getStyleNames());
cbStyles.setToolTipText("Select Style");
cbStyles.setMaximumSize(null);
cbStyles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currStyle = cbStyles.getSelectedItem().toString();
final SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(HTML.Attribute.CLASS, currStyle);
m_kit.getInputAttributes().addAttributes(attr);
m_editor.requestFocusInWindow();
}
});
m_toolBar.add(cbStyles);
零件内部的元素定义样式类。例如:
<style type="text/css">;
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
</style>
;
.style1{背景色:银色}
.style2{背景色:浅绿色}
.style3{背景色:青色}
然后在HTML中,这些类可以通过
HTML元素内部的通用属性“class”。例如:
<style type="text/css">;
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
</style>
样式1中的文本
因此,应该能够以某种方式插入带有
将预定义样式作为其值导入HTMLDocument中的元素
这是由HTMLEditorKit管理的。我的小HTML编辑器是
提供在当前插入符号位置激活样式的功能
在文档内部。假设插入符号的位置在
像这样的段落:
一些没有样式的文本
在结束段落标记前的单词“style”之后
现在我想激活,比如说,style1。这将导致
类似以下结构:
一些没有样式的文本
现在插入符号的位置应该在新元素内部
或者如果插入符号位于空段落的开头:
应用样式后,结构应如下所示:
class HtmlEditor extends JFrame implements Keylistener, MouseListener {
private HTMLDocument m_doc;
private HTMLEditorKit m_kit;
[...]
public HtmlEditor(...) {
[...]
final URL formats = HtmlEditor.class.getResource("/formats.css");
predefStyles = new StyleSheet();
predefStyles.importStyleSheet(formats);
m_kit.getStyleSheet().addStyleSheet(predefStyles);
[...]
}
.style1 { background-color:silver }
.style2 { background-color:aqua }
.style3 { background-color:teal }
cbStyles = new JComboBox<String>(getStyleNames());
cbStyles.setToolTipText("Select Style");
cbStyles.setMaximumSize(null);
cbStyles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currStyle = cbStyles.getSelectedItem().toString();
final SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(HTML.Attribute.CLASS, currStyle);
m_kit.getInputAttributes().addAttributes(attr);
m_editor.requestFocusInWindow();
}
});
m_toolBar.add(cbStyles);
我想这没什么大不了的,但我不知道该怎么做
这已经完成了
其间,我尝试了另一种方法来解决我的问题,但没有成功。下面是完整的示例代码(希望不要太多;-):
导入java.awt.BorderLayout;
导入java.awt.Container;
导入java.awt.FlowLayout;
导入java.awt.Font;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.IOException;
导入java.io.StringWriter;
导入javax.swing.Action;
导入javax.swing.JButton;
导入javax.swing.JDialog;
导入javax.swing.JEditorPane;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.JToolBar;
导入javax.swing.border.EmptyBorder;
导入javax.swing.text.BadLocationException;
导入javax.swing.text.StyledEditorKit;
导入javax.swing.text.html.html;
导入javax.swing.text.html.HTMLDocument;
导入javax.swing.text.html.HTMLEditorKit;
导入javax.swing.text.html.StyleSheet;
公共类HTMLEditor扩展JFrame{
私有静态最终长serialVersionUID=1L;
私人最终绝地武士团;
私人最终HTMLEditorKit edtKit;
私人最终HTMLDocument文件;
公共静态void main(字符串[]args){
最终HTMLEditor编辑器=新HTMLEditor();
编辑器.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
editor.setVisible(true);
}
公共HTMLEditor(){
超级(“简单HTML编辑器”);
jep=新的JEditorPane();
edtKit=新的HTMLEditorKit();
jep.setEditorKit(edtKit);
addMyStyles();
doc=(HTMLDocument)edtKit.createDefaultDocument();
jep.setDocument(doc);
jep.setText(“”)+
“样式1”+
"");
最终容器内容=getContentPane();
添加(jep,BorderLayout.CENTER);
添加(createToolBar(),BorderLayout.NORTH);
setJMenuBar(createMenuBar());
设置大小(320240);
}
/**
*向HTMLEditorKit的样式表中添加三个简单的样式定义。
*/
void addMyStyles(){
最终样式表样式=edtKit.getStyleSheet();
styles.addRule(“.style1{背景色:银色;}”);
styles.addRule(“.style2{背景色:aqua;}”);
styles.addRule(“.style3{背景色:teal;}”);
}
/**
*使用两个按钮创建工具栏:
*在粗体和普通文本之间切换的按钮
* 用于激活样式类的按钮
*@返回工具栏
*/
受保护的JToolBar createToolBar(){
最终JToolBar=新的JToolBar();
最终操作boldAct=jep.getActionMap().get(“字体粗体”);
boldAct.putValue(Action.NAME,“粗体”);
加上(黑体字);
bar.addSeparator();
最终操作styleAct=新的StyleAction();
jep.getActionMap().put(“激活样式”,styleAct);
添加(styleAct);
返回杆;
}
/**
*创建菜单栏。它只提供显示HTML源代码的命令和操作
*在弹出窗口中。
*