Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster

aiirtime

Mitglied
Hallo,

ich möchte gerne mit einem JDialog eine user-Eingabe auslesen und an weitere Fenster geben.
folgenden Code habe ich bisher geschrieben:

Eine main Klasse:
Code:
public class Viewer
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				try {
					MainView frame = new MainView();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

}

in der Main-View wird dann per ActionListener vom MenuItem ein neues Objekt erstellt:
Code:
mnProject.add(mntmRun);
	mntmRun.addActionListener(new ActionListener()
	{
		public void actionPerformed(ActionEvent e)
		{
			Project p = new Project();
		}
	});

In der Klasse Project wird dann ein Dialog im Konstuktor erstellt der eine Eingabe-Aufforderung ist:
Code:
try{
	RunProjectDialog rpd_obj = new RunProjectDialog();
	rpd_obj.setModal(true);
	name = rpd_obj.getProjectName();
}catch(Exception e)
{	JOptionPane.showMessageDialog(null, e.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE);
}

und in diesem Dialog möchte ich die Eingabe vom user auslesen und rückwirkend an die Fenster weiter geben. Dies soll dann per ActionListener beim Knopfdruck"Ok" passieren:
Code:
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener()
{
	public void actionPerformed(ActionEvent e)
	{
		name = txtProjectname.getText();
		RunProjectDialog.this.setVisible(false);
	}
});

Ich komme nicht dahinter was ich falsch mache. Mit einpaar Text ausgaben zwischen den entsprechenden Zeilen sehe ich das der Text ausgelesen wird, jedoch die Eingabe vom user nicht abgewartet wird (was nicht nötig ist) da im entsprechenden String null ist.

Ich hoffe auf eure Hilfe.
Air
 
Zuletzt bearbeitet:
Hi,
also wenn ich meinen Dialog mit JOptionPane.showInputDialog() austausche dann wartet das Programm bis die Eingabe durchgeführt wurde. Was muss ich noch einstellen oder was habe ich vergessen?
 
Moin,

dann poste mal Deine Klasse RunProjectDialog!
Wird sie von irgendwas abgeleitet?
Dann musst Du wahrscheinlich im Konstruktor einmal den super-Konstruktor aufrufen und es dort ebenfalls setzen!

Gruß Klaus
 
Hi,

die Klasse RunProjectDialog erbt von JDialog. Ich wollte die Klasse nicht hochladen da diese mit dem Designer erstellt ist und sehr viele Zeile die nicht wichtig sind enthält.
Im Konstruktor habe ich kein super() gehabt, da ich die Verbindung mit dem owner nicht hatte.
Ich habe jetzt den owner über die Konstruktoren weiter geleitet und es klappt.
Ich habe aber das Gefühl das das kein so schöner Programmierstil ist oder irre ich mich da?

Anbei die Äanderungen in
MainView:
Code:
Project p = new Project(MainView.this);
in Project:
Code:
public Project(JFrame owner_frame)
	{	
		try{
			//RunProjectDialog(this);
			RunProjectDialog rpd_obj = new RunProjectDialog(owner_frame);
in RunProjectDialog:
Code:
public RunProjectDialog(JFrame owner_frame)
	{
		super(owner_frame, true);

Gruß Air
 
Moin,

IMHO solltest Du den Owner immer bekanntgeben, da sich das MODAL ja auch auf ihn bezieht.
Es gibt aber auch noch
Java:
RunProjectDialog.setAlwaysOnTop( true );
Vielleicht reicht das ja auch aus ...

Gruß Klaus
 
Hi,

vielen Dank für die Tips. setAlwaysOnTop reicht aber nicht aus, ich denke das das frame so wie zuvor einfach nicht auf die eingabe wartet, da der Dialog einfach nur drüber gelegt wird.
Kurze allgemeine Frage gibt es hier ein close thread oder so, bin total blind:bahnhof:

Gruß Air
 
Zuletzt bearbeitet:

Zurück
Oben