2009-10-13 6 views
0

J'ai créé un programme Java avec GUI. Maintenant, je veux ajouter un composant sur l'interface graphique où je peux afficher tout ce que je veux de la même manière que nous affichons la sortie parProblème avec Java GUI

System.out.println(); 

Quel composant que je peux ajouter sur l'interface graphique et comment afficher le contenu sur ce composant.

+0

Je ne crois pas qu'il y ait moyen de changer où System.out.println() va, donc si vous essayez de le faire, vous n'avez probablement pas de chance. C'est ici que les frameworks de journalisation comme log4j sont utiles, car vous pouvez configurer l'emplacement des messages. – Herms

+0

@Herms: http://java.sun.com/javase/6/docs/api/java/lang/System.html#setOut%28java.io.PrintStream%29 –

Répondre

5

Vous pouvez définir une PrintStream qui imprime à une JTextArea:

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

Ajout de 'SwingUtilities.invokeLater()'. –

+0

Ajout de 'System.setOut()'. –

+0

Merci à @John. Je vais l'utiliser dans mon code, aussi. – tangens

1

Pour une seule ligne, vous pouvez utiliser un JLabel et définir sa propriété de texte. Comment utiliser JLabel: http://www.leepoint.net/notes-java/GUI/components/10labels/jlabel.html

Ou si vous devez imprimer plusieurs lignes, vous pouvez utiliser une zone JTextArea.

Il est également possible de dessiner/peindre du texte sur le panneau GUI avec Java2D et l'objet Graphics.

+0

Techniquement, oui, vous pouvez utiliser un JLabel, mais pourquoi utiliser un JLabel pour quelque chose d'autre que d'étiqueter quelque chose? –

1

Vous pouvez utiliser un JTextArea et y ajouter du texte chaque fois que vous imprimez quelque chose. Appelez setEditable(false) donc c'est en lecture seule. Ajoutez-le à un JScrollPane donc c'est défilement.

Ou vous pouvez utiliser un JList et ajouter chaque ligne dans un élément de liste distinct. Cela n'empêchera pas l'utilisation de mots, mais si vous affichez quelque chose qui s'apparente à un journal d'événements, cela sera bien dans ce cas.