如何创建和使用 JTextPane

How to create and use a JTextPane

我想在 Java 中创建一个程序,它是这样完成的:

一个window 包含一个按钮和一个无法修改的组件(JTextArea、JTextPane 等),其中根据某些工作的执行会出现一些字符串。 从图中可以看出,如果作业成功,文本将为黑色,如果有错误,将标记为红色。

我设法使用 JTextArea 和 JButton 正确地完成了所有操作,但我发现您无法逐行更改字符串的颜色。

我读到应该使用 JTextPane,但我无法使用它。 这是我写的代码:

public class Example {

   public Example() {
        JFrame frame = new JFrame();
        JTextPane pane = new JTextPane();
        JButton button = new JButton("Button");
    
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pane.setPreferredSize(new Dimension(200, 200));
        frame.add(pane);
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Example();
    }
}

当我运行程序时,创建的是这样的:

TextPane 在哪里?

另外,在我使用append()在JTextArea中添加文本之前,我没有找到与JTextPane类似的方法吗?你如何使用它? 如何更改单行的颜色?

我已经阅读、看到并尝试了在互联网上找到的各种示例,但我无法完成任何事情... 有类似的例子吗?

对于“通用”请求,我深表歉意...

谢谢

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class Example {

    public Example() {

        JFrame frame = new JFrame();
        JTextPane pane = new JTextPane();;
        JButton button = new JButton("Button");

        addColoredText(pane, "Red Text\n", Color.RED);
        addColoredText(pane, "Blue Text\n", Color.BLUE);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pane.setPreferredSize(new Dimension(200, 200));
        frame.getContentPane().add(pane, BorderLayout.CENTER);
        frame.getContentPane().add(button, BorderLayout.WEST);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Example();
    }

    public void addColoredText(JTextPane pane, String text, Color color) {
        StyledDocument doc = pane.getStyledDocument();

        Style style = pane.addStyle("Color Style", null);
        StyleConstants.setForeground(style, color);
        try {
            doc.insertString(doc.getLength(), text, style);
        } 
        catch (BadLocationException e) {
            e.printStackTrace();
        }           
    }
}

试试这个例子

我建议您查看 JavaFX,它有更好的 UI。 但是,您已经在使用 JPanel 和 JButton。您可以使用 JLabel 来显示所需的文本,并使用 JLabel.setTextFill(Color.WHITESMOKE) 来设置文本的颜色。

这是一个更好的开始:

import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;

public class test  {

    public test() throws BadLocationException {

        JFrame frame = new JFrame();
        DefaultStyledDocument document = new DefaultStyledDocument();
        JTextPane pane = new JTextPane(document);
        JPanel mainPanel = new JPanel();
        JButton button = new JButton("Button");
        button.setPreferredSize(new Dimension(100, 40));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pane.setPreferredSize(new Dimension(200, 200));
        mainPanel.add(button);
        frame.getContentPane().add(pane, BorderLayout.CENTER);
        frame.getContentPane().add(mainPanel, BorderLayout.WEST);
        StyleContext context = new StyleContext();
        // build a style
        Style style = context.addStyle("test", null);
        // set some style properties
        StyleConstants.setForeground(style, Color.BLACK);
        document.insertString(0, "Four: success \n", style);
        StyleConstants.setForeground(style, Color.RED);
        document.insertString(0, "Three: error \n", style);
        document.insertString(0, "Two: error \n", style);

        StyleConstants.setForeground(style, Color.BLACK);
        // add some data to the document
        document.insertString(0, "One: success \n", style);


        //  StyleConstants.setForeground(style, Color.blue);

        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String[] args) throws BadLocationException {
        new test();
    }
}

它非常基础,但应该可以帮助您入门。当您必须通过颜色添加文本和级联时,您可以创建不同的方法。

JTextPane消失是因为在同一区域添加多个组件会覆盖后面添加的新组件。所以你需要将它们添加到不同的区域。

frame.add(pane);
frame.add(button,BorderLayout.SOUTH);

像这样。我建议您查看布局。