style =“display:none”属性在JTextPane中不起作用

时间:2018-03-06 12:38:12

标签: java attributes styles jtextpane

我正在使用JTextPane在java中创建一个html编辑器。属性style =“display:none”似乎没有像预期的那样在这里工作。帮帮我吧 我的代码是:

JTextPane basePane = new JTextPane(); 
basePane.setEditorKit(JEditorPane.createEditorKitForContentType("text/html"));
basePane.setContentType("text/html");
basePane.setText("<html><body><p style=\"display: none\" >hello world!</p></body></html>");

字符串“你好世界!”还在印刷。 我尝试使用div标签并在那里放置了style =“display:none”属性。它也不起作用。 帮帮我吧!

提前致谢! ;)

2 个答案:

答案 0 :(得分:0)

如果您想实现此功能,我认为您需要创建自己的视图。 JTextPane中对CSS的支持非常偏袒。

尝试这样的事情:

    //Create a view that inherites from InlineView and behave the way you want.
    //In your case, it should react to getAttributes().getAttribute(CSS.Attribute.DISPLAY);
    private class HideableView extends InlineView {
        public HideableView(Element elem) { super(elem); }
        //Implement your expected behaviour here
        @Override
        public void paint(Graphics g, Shape a){}
    }


    //Create a View Factory that will replace InlineViews by your custom View
    public static class HTMLBetterFactory extends HTMLEditorKit.HTMLFactory {
        @Override
        public View create(Element elem) {
            AttributeSet attrs = elem.getAttributes();
            Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute);
            Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute);
            if (o == HTML.Tag.CONTENT) {
                if(attrs.getAttribute(CSS.Attribute.DISPLAY).toString().equals("none"))
                      return new HideableView(elem);
            }
            return super.create(elem);
        }
    }


//Create an HTMLEditorKit that will use your custom Factory
public class HTMLBetterEditorKit extends HTMLEditorKit {

    private final HTMLEditorKit.HTMLFactory factory = new HTMLBetterFactory();
        @Override
        public ViewFactory getViewFactory() {
            return factory;
        }
    }
}

//Import your HTMLEditorKit into your JTextPane
HTMLBetterEditorKit editorKit = new HTMLBetterEditorKit();
myJTextPane.setEditorKit(editorKit);

这适用于内联元素,但您可以为其他元素重现该过程。

答案 1 :(得分:0)

我的用例略有不同,但可能仍然适用于最终到达这里的其他人。我在 JLabel 中渲染了一些 HTML 并想有条件地隐藏一些元素。我不需要任何动态可见性,所以我最终在 Java 中进行了预过滤,以防止我想要隐藏的元素甚至无法进入 HTML 源。