JDialog InputDialog erstellen

Solidus0815

Grünschnabel
Hi,
ich möchte mir eine eigene Klasse für einen JDialog erstellen den ich extern
benutzten kann.

Wie kann ich beim Klick auf den Ok Button die eingegebenen Werte an die
aufgerufene Klasse zurückgeben

Wenn ich den Dialog in der Klasse erstellen in der ich ihn benutze ist
das alles kein Problem.

Ich würds gern als eigenständige Klasse machen den ich in jeden Prog benutzen kann.
Ähnlich dem JOptionPane nur das ich ihn freier gestallten kann.

Vielen Dank für die Hilfe
Solidus
 
Reicht dir denn der InputDialog von JOptionPane nicht aus? Du kannst da ein Icon angeben, den Titel und die Nachricht setzen und bekommst auch den eingegebenen Text zurück. Mehr will man doch von so einem InputDialog nicht, eigentlich bräuchte man nicht einmal das Icon.

Naja, sowas zu basteln ist aber auch nicht sonderlich schwer. Der Trick dabei ist, dass der Dialog modal sein muss, damit das Programm an der Stelle hängen bleibt und sobald der Dialog zerstört wird, läuft das Programm weiter.

Hab da mal ein einfaches Beispiel zur Veranschaulichung gebastelt:
Java:
package de.tutorials.forum.help.solidus0815.dialogs;

import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridLayout;
import java.awt.Window;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MyDialogs {
	public static String showInputDialog(Window owner, String message, String title) {
		final JDialog dialog = new JDialog(owner, title, ModalityType.APPLICATION_MODAL);
		dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

		JLabel messageLabel = new JLabel(message);
		JTextField inputTextField = new JTextField();
		JButton okButton = new JButton("OK");
		okButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				dialog.dispose();
			}
		});

		dialog.setLayout(new GridLayout(3, 1));
		dialog.add(messageLabel);
		dialog.add(inputTextField);
		dialog.add(okButton);

		dialog.setSize(350, 100);
		dialog.setLocationRelativeTo(null);
		dialog.setVisible(true);

		return inputTextField.getText();
	}
}
Wie du siehst, kannst du den Dialog gestalten, wie du lustig bist und genauso auch machen, was du willst.

Testen kannst du das dann z.B. so:
Java:
package de.tutorials.forum.help.solidus0815.dialogs;

public class DialogsTest {
	public static void main(String[] args) {
		//		JOptionPane.showInputDialog("rofl");
		System.out.println(MyDialogs.showInputDialog(null, "Test und so", "Test"));
	}
}
Da siehst du auch, dass es erst weiter geht, wenn man den Dialog zerstört hat. Das passiert z.B. beim Klick auf den OK-Button. Leider auch beim Klick auf den Schließen-Button des Dialogs, das müsste dann abgefangen werden. Aber wie gesagt, dient ja eigentlich auch nur der Vernaschaulichung und mehr nicht.
 
Zuletzt bearbeitet:
Ok vielene dank,

damit wär das Rätsel gelöst, dann war es wohl komplett unnötig die eingaben erst bei
actionPerformed abzufragen.

Der Grund warum ich einen eigenen erstellen will ist das ich bei JOptionPane im Design
sehr eingeschränkt bin, wenn ich mehrere Eingabefelder einbauen will.

Außerdem lassen sich da die Buttons nicht ändern.

Und eigenen bauen ist mit dem jetzigen Hinweis auch nich mehr schwer^^

mfg
Solidus
 
Kann es sein, dass das auf eine Art Formular hinaus läuft?

Wie gesagt, der Trick dabei ist einfach, dass der Dialog einfach modal geschaltet sein muss, dann ist das auch kein Problem, man kann sich dann also austoben, wie man Lust hat. Ansonsten kann man sich auch die Klasse JOptionPane anschauen, die Sources sind ja frei verfügbar. Ist sicherlich auch sehr lehrreich.
 

Neue Beiträge

Zurück