Userinput in GUI an externes Programm

hierUndDa

Mitglied
Hallo zusammen

Ich habe eine Klasse die vollautomatisch abläuft. Nun ist es jedoch bewusst möglich diese Klasse zu vererben und die Methoden zu überschreiben, die einen Userinput ermöglichen.

Mit der CommandLine ist das ziemlich einfach, da schreibe ich einfach:

Java:
        @Override
	public boolean getAnswer(String question) {
		System.out.println(question + " (y/n) ");
		
		Scanner scan = new Scanner(System.in);
		String answer = scan.nextLine();
		if (answer.equals("y"))
			return true;
		else 
			return false;
	}

Wie aber bewerkstellige ich das in einem GUI? Das GUI ist eigentlich schon erstellt und es hat auch yes/no knöpfe, die ich aktivieren, bzw. deaktivieren kann. In meiner überschriebenen Klasse habe ich zugriff auf mein GUI.

Java:
        @Override
	public boolean getAnswer(String question) {
		String answer = gui.getAnswer();

		if (answer.equals("y"))
			return true;
		else 
			return false;
	}

Dann im GUI:

Java:
       public String getAnswer() {
          yes.setEnable(true);
          no.setEnable(true);

          //Halte bis user den button geklickt hat.

           return result;
       }

Aber wie bringe ich das Programm dazu zu warten?
 
Zuletzt bearbeitet:

jgh

Top Contributor
da bietet sich ein JDialog an, oder ein JOpitonPane, die sind, bzw. können modal gesetzt werden und warten auf ein OK, eine Eingabe, oder was auch immer.

Java Code im
Java:
 nicht in <java>
 

hierUndDa

Mitglied
Ja, das wäre möglich. Nur möchte ich gerne die Buttons verwenden, die bereits auf meiner GUI vorhanden sind. Hier ein vereinfachtes Beispiel, das jedoch nicht korrekt funktioniert, von dem was ich gerne möchte.

Java:
package examples;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {
	public static void main(String[] args) {
		Gui gui = new Gui();
		Player p = new Player();
		p.start();
		HumanPlayer hp = new HumanPlayer(gui);
		hp.start();
	}
}


class Gui extends JFrame implements ActionListener {

	JButton sandro;
	JButton sandra;
	boolean result;
	String answer = null;
	
	public Gui() {
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		sandro = new JButton("sandro");
		sandra = new JButton("sandra");
		sandro.addActionListener(this);
		sandra.addActionListener(this);
		sandro.setEnabled(false);
		sandra.setEnabled(false);
		this.add(panel);
		panel.add(sandro);
		panel.add(sandra);
		this.setSize(300, 300);
		this.setVisible(true);
	}
	
	public String askForName() {
		sandro.setEnabled(true);
		sandra.setEnabled(true);
		
		//Warten bis Klick von User??
		while(result == false) { }
		//??
		
		result = false;
		return answer;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		answer = arg0.getActionCommand();
		sandro.setEnabled(false);
		sandra.setEnabled(false);
		result = true;
	}
}

class Player {
	private String name;
	
	public void start() {
		name = askForName();
		System.out.println("Your name is " + name);
	}
	
	protected String askForName() {
		return ("Bernhard");
	}
}

class HumanPlayer extends Player {
	
	Gui gui;
	
	public HumanPlayer(Gui gui) {
		this.gui = gui;
	}

	@Override
	protected String askForName() {
		return gui.askForName();
	}
}
 

hierUndDa

Mitglied
Schreibt man die Methode askForName() in der Klasse Gui folgendermassen, dann funktioniert es. Aber schön ist das nicht, oder?

Java:
	public String askForName() {
		sandro.setEnabled(true);
		sandra.setEnabled(true);
		
		while(result == false) { 
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		result = false;
		return answer;
	}
 
G

Gast2

Gast
erbt doch einfach von JDialog

Java:
class Gui extends JDialog ... {

    public GUI()
    {
         super(true);
         initDialog();
         ...
    }
}

Java:
public askForName()
{
    GUI g = new GUI();
    g.setVisible(true);
    // hier erst geht es erst weiter wenn der Dialog geschlossen wurde
    ....
}
 

jgh

Top Contributor
ich weiß nicht, was du da machen willst...aber so kann man bspw. den Namen abfragen und dann wo auch immer ausgeben. Hier gebe ich den eingegebenen Namen auf einem Button und in der konsole aus.
Ist auch nicht sonderlich gut...aber wie heißt es so schön: quick and dirty^^

Java:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

class Test {
	public static void main(String[] args) {
		Gui gui = new Gui();
		Player p = new Player();
		p.start();
		HumanPlayer hp = new HumanPlayer(gui);
		hp.start();
	}
}

public class Gui extends JFrame implements ActionListener {
	Gui gui;
	JButton sandro;
	JButton sandra;
	boolean result;
	String answer = null;

	public Gui() {
		gui = this;
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		sandro = new JButton("Wer bist du?");
		sandra = new JButton("sandra");
		sandro.addActionListener(this);
		sandra.addActionListener(this);
		sandro.setEnabled(false);
		sandra.setEnabled(false);
		this.add(panel);
		panel.add(sandro);
		panel.add(sandra);
		this.setSize(300, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		this.setVisible(true);
	}

	public String askForName() {
		sandro.setEnabled(true);
		sandra.setEnabled(true);

		// Warten bis Klick von User??
		while (result == false) {
		}
		// ??

		result = false;
		return answer;
	}

	@SuppressWarnings("deprecation")
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// answer = arg0.getActionCommand();
		// sandro.setEnabled(false);
		// sandra.setEnabled(false);
		// result = true;
		if (arg0.getSource() == sandro) {
			final JDialog jd = new JDialog();
			jd.setModal(true);
			jd.setSize(200, 200);
			jd.setLocationRelativeTo(gui);
			jd.setLayout(new FlowLayout());
			final JTextField tf = new JTextField(10);
			JLabel l = new JLabel("Geben Sie ihren Namen ein");

			jd.add(l);
			jd.add(tf);
			JButton jb = new JButton("OK");
			jd.add(jb);
			jb.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					irgendeineMethode(tf.getText());
					jd.dispose();
				}

			});
			jd.setVisible(true);
		}
	}

	private void irgendeineMethode(String name) {
		System.out.println(name);
		sandra.setText(name);

	}
}

class Player {
	private String name;

	public void start() {
		name = askForName();
		System.out.println("Your name is " + name);
	}

	protected String askForName() {
		return ("Bernhard");
	}
}

class HumanPlayer extends Player {

	Gui gui;

	public HumanPlayer(Gui gui) {
		this.gui = gui;
	}

	@Override
	protected String askForName() {
		return gui.askForName();
	}
}
 

hierUndDa

Mitglied
Was ich gerne möchte ist, dass dieser Aufruf hier funktioniert:

[java=70]
name = askForName();
[/code]

Dabei soll jedoch nicht das gesamte GUI stehen bleiben (was ja bei JDialog der Fall ist), da ich noch andere Sachen in meinem GUI laufen habe, sondern nur das externe Programm (im Beispiel der HumanPlayer) darauf warten, bis es eine Antwort bekommt.

Grüsse
hierUndDa
 

jgh

Top Contributor
die methode funktioniert.

HTML:
Your name is Bernhard

sorry, ich weiß nicht was du ansonsten willst...evtl. kann dir jemand anders helfen, ich bin raus^^
 

hierUndDa

Mitglied
:)

Die Methode funktioniert, solange ich einen normalen Player benutze der immer "Bernhard" zurückgibt und eigentlich nichts mit dem GUI zu tun hat. Wenn ich jedoch meinen HumanPlayer, bei dem das GUI einen der beiden Namen auf den Buttons zurückgeben soll, funktionierte es anfangs nicht.

Mit der Variante von
HTML:
Gestern 23:10
funktioniert das ja jetzt auch. Hab nur gedacht, dass es da vielleicht einen schöneren Weg gibt. Danke trotzdem.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Externes JFrame in ein JPanel AWT, Swing, JavaFX & SWT 5
S Ein externes Bild in ein JFrame einfügen AWT, Swing, JavaFX & SWT 8
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
H Swing HUD in externes Programm einblenden AWT, Swing, JavaFX & SWT 7
F Externes Look & Feel für Swing wie importieren/verwenden AWT, Swing, JavaFX & SWT 3
U externes .jar file einbinden [jdic] AWT, Swing, JavaFX & SWT 16
Juelin Zugriff auf Bildschirmobjekte aus einem anderen Programm AWT, Swing, JavaFX & SWT 6
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
G Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben