system.out.println ausgabe in fenster (JFrame) anzeigen [Java]?

4 Antworten

Du kannst System.out überschreiben, sodass die Ausgabe z.B. in einem Textfeld angezeigt wird.

Theoretisch wäre es möglich, dafür müsstest du die Methode überschreiben. Aber es wäre aus 2 Gründen keine gute Idee:

  1. Du kämst im guten nicht mehr an die Originalmethode ran. (Wer weiß, vielleicht brauchst du die weiter unten im Code.)
  2. Es wäre schlechter Stil. Du willst etwas anderes als die Originalmethode, deshalb benutzt man auch eine andere Methode.

Dazu würde ich vorschlagen, dass du den Text in einem JLabel oder einer JTextArea ausgibst. (Ich bevorzuge zweiteres, vor allem weil du durch das Hinzufügen zu einer JScrollPane ohne größere Probleme ermöglichen kannst, dass man hoch und runterscrollen kann.

Noch Fragen dazu?

FynnFynn1334 
Fragesteller
 19.02.2017, 19:08

danke^^ kann ich in einer JTextArea auch system.in also scanner einbauen?

1
tooneu  19.02.2017, 19:51
@FynnFynn1334

Das geht, aber die Sache ist, dass der user dann an jeder beliebigen Stelle in der TextArea tippen kann. Ich würde das setEnabled() der TextArea eher auf false, setzen, also das der user nicht darin tippen kann und die Eingabe eher mit einem JTextField darunter machen, dem kannst du auch direkt einen ActionListener zuweisen, der darauf lauscht, wann enter gedrückt wurde, und dann kannst du mit getText() den Text aus dem TextFeld lesen und, wenn du willst, z.B. mit append() an den Text, der schon in der TextArea steht, anfügen.

Ist das auch eine akzeptable Lösung oder muss es unbedingt mit Input- und OutputStreams sein? Solange du keine Errormeldungen ausgibst und dich nicht mit Sockets beschäftigst, braucht man die nämlich eigentlich nichtl. ;-)

0
FynnFynn1334 
Fragesteller
 19.02.2017, 20:12
@tooneu

ich habe versucht setEnabled(false); zu machen aber jz kann ich das fenster nicht mehr beenden :( was hab ich falsch gemacht?

0
tooneu  19.02.2017, 20:26
@FynnFynn1334

Du musst setEnabled() auf die TextArea und nicht auf das JFrame anwenden ;-)

0
FynnFynn1334 
Fragesteller
 19.02.2017, 20:38
@tooneu

bin sehr neu in der "szene", wie kann ich denn setEnabled(); auf textarea anwenden? mit textarea.setEnabled(false); habe ich es prboiert, dann mekert eclippse aber rum

0
tooneu  20.02.2017, 15:26
@FynnFynn1334

Die Referenz zu deiner JTextArea heißt auch "textarea"? Welche Javaversion hast du? Und welche Eclipseversion? Du hast es importiert? (Aus dem package swing.)

Bei mir funktioniert das tadellos.

0
FynnFynn1334 
Fragesteller
 20.02.2017, 18:26
@tooneu

ich habe es jz gelöst... mit textarea.setEditable(false);

habe eclipse neon 2, ja es heist auch textarea java version 5.0 (bzw 1.5 )

0
tooneu  21.02.2017, 17:14
@FynnFynn1334

Stimmt, setEditable() ist eigentlich sogar noch besser, ich hatte gerade das falsche im Kopf ;-)

Du weißt schon, dass gerade Java 1.8 (= Java 8) aktuell ist? Spielt aber im Normalfall auch keine Rolle ^^

0

Mit System.out.println() erhälst du auf Konsolen-Ebene eine Ausgabe.

kann ich in einer JTextArea auch system.in also scanner einbauen?

System.in und System.out sind Input- und Outputstreams auf Konsolen-Ebene.

Wenn du eine GUI-Entwickeln möchtest, mithilfe von Swing oder JavaFX, bei der du eine Eingabe und Ausgabe nutzen möchtest, vernachlässige die Streams auf Konsolenebene.

Stattdessen nutze die Methoden, welche dir die einzelnen Swing oder FX Controls bieten:

setText();
getText();

Um Text entweder zuzuweisen oder abzufragen.

Einen Text in einer grafischen Oberfläche kann man auf unterschiedlichste Weise ausgeben. Die naheliegendste ist wohl ein Label (JLabel) dafür zu erstellen.