Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java控制台JPanel_Java_Swing_Console_Jpanel - Fatal编程技术网

Java控制台JPanel

Java控制台JPanel,java,swing,console,jpanel,Java,Swing,Console,Jpanel,你好 是否可以将java控制台返回的内容绘制成JPanel? 你有教程要学吗? 谢谢 首先从控制台读取sw。为此,请使用System.setOut()。使用ByteOutputStream,在那里写入数据并从数据中读取数据。您将获得程序打印到it系统的内容。现在使用TextArea或JScrollPane显示文本 我记不起是在哪里找到的,但我已经使用一个我称为TextAreaOutputStream的类将输出流输出到JPanel中的JTextArea: import java.io.IOExce

你好 是否可以将java控制台返回的内容绘制成JPanel? 你有教程要学吗? 谢谢
首先从控制台读取sw。为此,请使用System.setOut()。使用ByteOutputStream,在那里写入数据并从数据中读取数据。您将获得程序打印到it系统的内容。现在使用TextArea或JScrollPane显示文本

我记不起是在哪里找到的,但我已经使用一个我称为TextAreaOutputStream的类将输出流输出到JPanel中的JTextArea:

import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class TextAreaOutputStream extends OutputStream {

    private final JTextArea textArea;
    private final StringBuilder sb = new StringBuilder();
    private String title;

    public TextAreaOutputStream(final JTextArea textArea, String title) {
        this.textArea = textArea;
        this.title = title;
        sb.append(title + "> ");
    }

    @Override
    public void flush() {
    }

    @Override
    public void close() {
    }

    @Override
    public void write(int b) throws IOException {

        if (b == '\r')
            return;

        if (b == '\n') {
            final String text = sb.toString() + "\n";
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    textArea.append(text);
                }
            });
            sb.setLength(0);
            sb.append(title).append("> ");
        }

        sb.append((char) b);
    }
}

然后,正如Alex在上面的回答中提到的那样,我将标准输出流重新定向到此对象。

创建FilterOutputStream的子类,以将所有内容回显到JTextArea

class Echo extends FilterOutputStream {

    private final JTextArea text;

    public Echo(OutputStream out, JTextArea text) {
        super(out);
        if (text == null) throw new IllegalArgumentException("null text");
        this.text = text;
    }

    @Override
    public void write(int b) throws IOException {
        super.write(b);
        text.append(Character.toString((char) b));
        // scroll to end?
    }

    // overwrite the other write methods for better performance
}
并替换标准输出:

    JTextArea text = new JTextArea();
    System.setOut(new PrintStream(new Echo(System.out, text)));

提供了一些您可能感兴趣的选项。

您可能希望在问题标签中添加“Swing”,以吸引论坛Swing专家。:)<代码>某人附加(标题)。附加(“>”)可能会更有效。@DavidConrad:确实会,因为它可以避免字符串concat。谢谢,答案已编辑。