2010-12-12 4 views
2

안녕하세요 JPanel에서 Java 콘솔이 반환하는 것을 그릴 수 있습니까? 따라 할 수있는 자습서가 있습니까? 감사합니다 sw자바 콘솔 JPanel

+1

포럼 스윙 전문가를 유치하기 위해 질문 태그에 "스윙"을 추가 할 수 있습니다. :) –

답변

2

처음 콘솔에서 읽습니다. 이렇게하려면 System.setOut()을 사용하십시오. ByteOutputStream을 사용하여 거기에 쓰고 그 (것)들에서 읽으십시오. 프로그램이 출력하는 내용을 시스템에서 가져올 수 있습니다. TextArea 또는 JScrollPane을 사용하여 텍스트를 표시하십시오.

6

내가 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가 그의 대답에서 언급 한 것처럼이 물체로 흐르게하십시오.

+1

'sb.append (title) .append (">");'아마 더 효율적 일 것입니다. –

+0

@DavidConrad : 실제로 String concat을 피할 것입니다. 감사합니다. 답변이 수정되었습니다. –

2

모든 것을 JTextArea에 반향시키기 위해 FilterOutputStream의 서브 클래스를 생성하십시오.

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