2009-10-13 54 views
0

我用GUI做了一个java程序。现在,我想在GUI中添加组件在那里我可以通过Java GUI问题

System.out.println(); 

显示我想做的事情在我们显示输出相同的方式哪个组件,我可以在GUI上如何显示组件的添加内容。

+0

我不相信有什么方法可以改变System.out.println()的位置,所以如果你试图这么做的话,你可能会不幸运。这就是log4j等日志框架派上用场的地方,因为您可以配置日志消息的去向。 – Herms 2009-10-13 19:38:01

+0

@Herms:http://java.sun.com/javase/6/docs/api/java/lang/System.html#setOut%28java.io.PrintStream%29 – 2009-10-13 19:43:34

回答

5

您可以定义打印到一个JTextArea一个PrintStream:

final JTextArea textArea = new JTextArea(); 
    PrintStream printStream = new PrintStream(new OutputStream() { 
     @Override 
     public void write(final int b) { 
      SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        textArea.append("" + (char)b); 
        textArea.setCaretPosition(textArea.getText().length()); 
       } 
      }); 
     } 
    }); 
    System.setOut(printStream); 
+0

增加了'SwingUtilities.invokeLater()'。 – 2009-10-13 19:37:58

+0

增加了'System.setOut()'。 – 2009-10-13 19:42:19

+0

感谢@约翰。我也会在我的代码中使用它。 – tangens 2009-10-13 19:44:38

1

对于只有一条线路,您可以使用一个JLabel并将其文本设置属性。如何使用JLabel:http://www.leepoint.net/notes-java/GUI/components/10labels/jlabel.html

或者如果您需要打印多行,则可以使用JTextArea-box。

它也可以使用Java2D和Graphics对象在GUI面板上绘制/绘制文本ontop。

+0

从技术上讲,是的,你可以使用JLabel,但为什么要使用JLabel来标记某些内容? – 2009-10-13 19:38:08

1

您可以使用JTextArea并在每次打印内容时向其添加文本。请致电setEditable(false),以便它是只读的。将它添加到JScrollPane因此它是可滚动的。

或者您可以使用JList并将每行添加为单独的列表项。它不会进行文字换行,但是如果您显示类似于事件日志的内容,它会为此目的找到好的。