2010-12-12 7 views
2

こんにちは Javaコンソールが返すものをJPanelで描画することはできますか? あなたにはチュートリアルがありますか? ありがとう swJava Console JPanel

+1

フォーラムのSwingエキスパートを引き付けるために、質問のタグに「Swing」を追加することをお勧めします。 :) –

答えて

2

最初にコンソールから読みます。これを行うには、System.setOut()を使用します。 ByteOutputStreamを使用し、そこに書き込んで、それらから読み込みます。あなたはあなたのプログラムがシステムに出力するものを得るでしょう。 TextAreaまたはJScrollPaneを使用してテキストを表示します。

私はこれを見つけた私は覚えていないことができますが、私はTextAreaOutputStreamを呼び出すクラスを使用してのJPanelで開催されたJTextAreaのに出力ストリームを出力している
6

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

私はその後、再直接標準出力をアレックスが上の彼の答えで言及しているように、このオブジェクトにストリームします。

+1

'sb.append(title).append("> ");'おそらくもっと効率的です。 –

+0

@DavidConrad:実際には、String Concatを避けるためです。ありがとう、答えは編集されました。 –

2

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

Message Consoleはあなたが興味かもしれないいくつかのより多くのオプションを提供します。