Консоль Java JPanel - PullRequest
       5

Консоль Java JPanel

2 голосов
/ 12 декабря 2010

Здравствуйте. Можно ли нарисовать в JPanel, что возвращает консоль java?у вас есть учебник для подражания?спасибо sw

Ответы [ 4 ]

6 голосов
/ 12 декабря 2010

Не могу вспомнить, где я нашел это, но я вывел выходной поток в JTextArea, хранящуюся в JPanel, используя класс I, вызывающий TextAreaOutputStream:

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);
    }
}

Затем я перенаправляю стандартВыведите Stream на этот объект, как Алекс упоминает в своем ответе выше.

2 голосов
/ 12 декабря 2010

Консоль сообщений предоставляет несколько дополнительных возможностей, которые могут вас заинтересовать.

2 голосов
/ 12 декабря 2010

Создайте подкласс 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)));
2 голосов
/ 12 декабря 2010

Первое чтение с консоли. Для этого используйте System.setOut (). Используйте ByteOutputStream, пишите туда и читайте их. Вы получите то, что ваша программа распечатывает в этой системе. Теперь используйте TextArea или JScrollPane для представления текста.

...