jimstar
Goto Top

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?
c33b1fe13c5c486f0e9363a78b83426f

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
d59cc7ceb530aa511c1ec39ba43eadb4



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

Content-ID: 264347

Url: https://administrator.de/contentid/264347

Ausgedruckt am: 26.11.2024 um 18:11 Uhr

114757
Lösung 114757 01.03.2015, aktualisiert am 12.08.2015 um 09:28:34 Uhr
Goto Top
Moin,
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());
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