代码之家  ›  专栏  ›  技术社区  ›  Sandro

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

  •  1
  • Sandro  · 技术社区  · 15 年前

    我目前有一个jtextfane,它将显示来自不同流的文本。用户判断文本来自哪个流的方式是,每个流中的文本具有不同的样式。有没有一种方法可以使样式隐藏文本,以便筛选出不同的文本?

    谢谢您。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Mark Peters    15 年前

    您可以(有点)通过使用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);
    }
    

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