0

所以我创建了一个简单的 JFrame 并向其中添加了一个 JTextPane 来创建一个排序控制台。

我的类中有以下方法和变量,它们应该改变 JTextPane 中文本的颜色。

private static final Object CurrentConsoleAttributes[] = new Object[4];
private static final SimpleAttributeSet ConsoleAttributes = new SimpleAttributeSet();

public Object[] getConsoleAttributes() {
    CurrentConsoleAttributes[0] = StyleConstants.getForeground(ConsoleAttributes);
    CurrentConsoleAttributes[1] = StyleConstants.getBackground(ConsoleAttributes);
    CurrentConsoleAttributes[2] = StyleConstants.isBold(ConsoleAttributes);
    CurrentConsoleAttributes[3] = StyleConstants.isItalic(ConsoleAttributes);
    return CurrentConsoleAttributes;
}

public void setConsoleAttributes(Color Foreground, Color Background, boolean Bold, boolean Italics) {
    synchronized(ConsoleAttributes) {
        StyleConstants.setForeground(ConsoleAttributes, Foreground);
        StyleConstants.setBackground(ConsoleAttributes, Background);
        StyleConstants.setBold(ConsoleAttributes, Bold);
        StyleConstants.setItalic(ConsoleAttributes, Italics);
    }
}

private void setOutputAreaText(final String Text) {
    SwingUtilities.invokeLater(new Runnable() {  //I read that I need to use this when dealing with swing and JTextPane is a swing component.
        @Override
        public void run() {
            try {
                StyledDocument Document = Frame.this.OutputArea.getStyledDocument();
                Document.insertString(Document.getLength(), Text, ConsoleAttributes);
            } catch (BadLocationException e) {
                e.printStackTrace();
            }
        }
    });
}

public void WriteLine(Object Value) {        
    try {
        System.out.print("Hey");
        setConsoleAttributes(java.awt.Color.red, Color.white, true, false);
        System.out.print("Testing");

        setConsoleAttributes(java.awt.Color.blue, Color.white, true, false);
        System.out.println("Printing");
    } catch (Exception Ex) {
        Ex.printStackTrace();
    }
}

但是,当我调用 WriteLine 时,整行都写成蓝色或最后使用的任何颜色。有什么我想念的想法吗?

4

0 回答 0