Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing CSS样式属性";“类”;在HTMLEditorKit/HTMLDocument中使用_Java_Swing_Htmleditorkit - Fatal编程技术网

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源代码的命令和操作 *在弹出窗口中。 *