Java - GUI Programmierung - Ausrichtungsfrage + JLabel Aktualisierung im Panel
Guten Morgen Community,
ich bin noch am Anfang der Java-Programmierung und will eigt. nur ein Programm schreiben, welches aus eine GUI besteht und durch Eingabe und dem ProcessBuilder einen Ping mit Windows Boardmitteln ausführt und am GUI anzeigt.
Problem 1: Wenn ich bei meinem Panel den Layout-Manager ausschalte, wird das GUI richtig angezeigt aber dann funktionieren die Labels irgendwie nicht. Wie wird programmiert, mit Layout-Manager oder ohne? Wie kann ich mit Layout-Manager einstellen wo etwas auf dem Panel ist?
Problem 2: Ich bekomme das JLabel irgendwie nicht aktualisiert mit der Statusmeldung, in Zeile 99 wird das label mit dem text von der CMD gefüllt genau wie in Zeile 100 mit dem Befehl system.out.println(s) der Text von der CMD direkt in der Console ausgegeben wird, welches ja auch funktioniert
Der Programmcode:
Ich weiß nicht ob das an Informationen reicht, um mir zu helfen. Falls noch welche benötigt werden, einfach danach Fragen.
Vielen Dank schon mal im Vorraus!
Mit freundlichen Grüßen,
Jimmy
ich bin noch am Anfang der Java-Programmierung und will eigt. nur ein Programm schreiben, welches aus eine GUI besteht und durch Eingabe und dem ProcessBuilder einen Ping mit Windows Boardmitteln ausführt und am GUI anzeigt.
Problem 1: Wenn ich bei meinem Panel den Layout-Manager ausschalte, wird das GUI richtig angezeigt aber dann funktionieren die Labels irgendwie nicht. Wie wird programmiert, mit Layout-Manager oder ohne? Wie kann ich mit Layout-Manager einstellen wo etwas auf dem Panel ist?
Problem 2: Ich bekomme das JLabel irgendwie nicht aktualisiert mit der Statusmeldung, in Zeile 99 wird das label mit dem text von der CMD gefüllt genau wie in Zeile 100 mit dem Befehl system.out.println(s) der Text von der CMD direkt in der Console ausgegeben wird, welches ja auch funktioniert
Der Programmcode:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;
import java.util.*;
// Damit Objekte der Klasse BeispielListener
// zum ActionListener werden kann, muss das Interface
// ActionListener implementiert werden
public class BeispielListener extends JFrame implements ActionListener {
static String ausgabe;
JButton button1;
JButton button2;
JButton button3;
JTextField eingabe1;
JTextField eingabe2;
JTextField eingabe3;
JLabel label;
JPanel panel;
public BeispielListener() {
this.setTitle("Ping");
this.setSize(400, 200);
panel = new JPanel();
// Leeres JLabel-Objekt wird erzeugt
label = new JLabel();
// Drei Buttons werden erstellt
button1 = new JButton("Start");
button2 = new JButton("Stop");
// Eingabefelder werden erstellt
eingabe1 = new JTextField();
// Gestaltung der Elemente
eingabe1.setBounds(10, 10, 200, 20);
button1.setBounds(30, 40, 70, 25);
button2.setBounds(120, 40, 70, 25);
// Buttons werden dem Listener zugeordnet
button1.addActionListener(this);
button2.addActionListener(this);
// Eingabefelder werden dem Listener zugeordnet
eingabe1.addActionListener(this);
// Buttons werden dem JPanel hinzugefügt
panel.add(button1);
panel.add(button2);
// Eingabefelder werden dem JPanel hinzugefügt
panel.add(eingabe1);
// JLabel wird dem Panel hinzugefügt
panel.add(label);
this.add(panel);
}
public static void main(String args) throws IOException {
// Ein neues Objekt der Klasse BeispielListener wird erzeugt
// und sichtbar gemacht
BeispielListener bl = new BeispielListener();
bl.setVisible(true);
}
public void doCommand(List<String> command) throws IOException {
String s = null;
ProcessBuilder pb = new ProcessBuilder(command);
Process process = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(
process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
label.setText(s);
System.out.println(s);
}
// read any errors from the attempted command
System.out
.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
label.setText(s);
}
}
public void actionPerformed(ActionEvent ae) {
// Die Quelle wird mit getSource() abgefragt und mit den
// Buttons abgeglichen. Wenn die Quelle des ActionEvents einer
// der Buttons ist, wird der Text des JLabels entsprechend geändert
if (ae.getSource() == this.button1) {
ausgabe = eingabe1.getText();
BeispielListener ping = new BeispielListener();
List<String> commands = new ArrayList<String>();
commands.add("ping");
commands.add("-l");
commands.add("5");
commands.add(ausgabe);
try {
ping.doCommand(commands);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Ich weiß nicht ob das an Informationen reicht, um mir zu helfen. Falls noch welche benötigt werden, einfach danach Fragen.
Vielen Dank schon mal im Vorraus!
Mit freundlichen Grüßen,
Jimmy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264347
Url: https://administrator.de/contentid/264347
Ausgedruckt am: 26.11.2024 um 18:11 Uhr
1 Kommentar
Moin,
Außerdem wäre hier ein JTextArea Element besser für diese Aufgabe geeignet, dem du die einzelnen Zeilen mit .Append hinzufügst.
http://stackoverflow.com/questions/629315/dynamically-refresh-jtextarea ...
Gruß jodel32
label.setText(s);
du setzt hier den Inhalt des Labels immer nur auf eine Zeile der Ausgabe. Und außerdem wird nichts angezeigt weil der Label während der Schleife nicht "refresht" wird.label.update(label.getGraphics());
http://stackoverflow.com/questions/629315/dynamically-refresh-jtextarea ...
Gruß jodel32