是否可以通过样式隐藏文本?

时间:2010-06-15 15:32:34

标签: java swing jtextpane

我目前有一个JTextPane,它将显示来自不同流的文本。用户可以判断文本来自哪个流的方式是每个流中的文本具有不同的样式。有没有办法制作一个会隐藏文字的样式,以便我可以过滤掉不同的文字?

谢谢。

1 个答案:

答案 0 :(得分:2)

你可以(通过使用0字体大小并匹配组件的背景来伪造它):

public static void main(String[] args) throws Exception {
    JTextPane pane = new JTextPane();

    Style regular = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
    Style invisible = pane.getStyledDocument().addStyle("invisible", regular);
    StyleConstants.setFontSize(invisible, 0);
    StyleConstants.setForeground(invisible, pane.getBackground());
    pane.getStyledDocument().insertString(pane.getStyledDocument().getLength(), 
            "Hello, ", null);
    pane.getStyledDocument().insertString(pane.getStyledDocument().getLength(), 
            "cruel ", pane.getStyledDocument().getStyle("invisible"));
    pane.getStyledDocument().insertString(pane.getStyledDocument().getLength(), 
            "world!", null);
    pane.setPreferredSize(new Dimension(500, 500));

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.add(pane, BorderLayout.CENTER);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack(); frame.setVisible(true);
}

上面不可见字符串的长度似乎甚至不会影响可见组件之间的空间。但请放心,它仍然存在,因为从窗格中复制将证明。