Java-Forum.org  

Zurück   Java-Forum.org > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen: eine 'showDialog'-Methode erstellen

Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 27.10.2007, 09:39   #1
Evolver
 
eine 'showDialog'-Methode erstellen - Standard eine 'showDialog'-Methode erstellen

Ich würde gerne für einen modalen Dialog (eine Klasse die von JDialog erbt) eine Methode zum Öffnen mit einem Rückgabewert erstellen, der Rückgabewert sei abhängig von den Aktionen, die der Benutzer im Dialog macht. Man könnte das mit der showDialog-Methode von z.B. JFileChooser vergleichen. Nur wie muss ich da vorgehen? In der Methode sicherlich setVisible aufrufen, aber dann? Der Rückgabewert steht ja zu diesem Zeitpunkt noch nicht fest.
 

 
Anzeige
 

AW: eine 'showDialog'-Methode erstellen



 
Alt 27.10.2007, 10:29   #2
anfänger15
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

bin mir nicht sicher ob dir das hilft aber da gibts schon fertige dialoge (JOtpionPane einfach mal googlen)

wenn du es mit jdialog machen willst musst du anfags setVisible aufrufen und sollange warten bis zum beispiel ein actionEvent geworfen wird der user also einen button gedrückt hat, dann kanst du je nachdem welcher button gedrückt wurde das entsprechende zurückgeben. die methode showDialog darf also nicht sofort beendet werden, sondern sie muss solange blockieren bis der user eben einen button drückt.
 
Alt 27.10.2007, 13:37   #3
Evolver
Themenstarter
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

Ja, soweit war ich auch schon. Und wie blockiere ich sie richtig? Ich habe versucht einfach wait() zu verwenden und dann beim beenden notify(), bin mir aber erstens nicht sicher, ob das der richtige Ansatz ist und zweitens hat es nicht geklappt (wenn ich in showDialog nach setVisible die Methode wait aufrufe, wird der ganze "Dialog-Vorgang" blockiert).
 
Alt 27.10.2007, 14:23   #4
anfänger15
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

also wenn das jetzt die actionPerformed Methode deines dialoges wäre, dann würde der dialog doch solange angezeigt, bis jemand einen Button drückt oder?


Code:
			public void actionPerformed(ActionEvent e) {
				String label;

				label = e.getActionCommand();

				if (label.equals("Abbruch")) {
					textEingabe = "null";
					setVisible(false);
					return;
				}

				if (label.equals("OK")) {
					textEingabe = eingabefeld.getText();
					setVisible(false);
					return;
				}
			} // Ende von 'ActionPerformed'

			public String getString() {
				return textEingabe;
			}
und das da unten könnte doch die showDialog methode sein. Dann würde der dialog doch solange sichtbar sein bis jemand einen Button drückt und dann würde getString doch das ergebnis zurückgeben

Code:
	    
public String showDialog(){

CFrageDialog frage = new CFrageDialog(this, "Ihr Text");
		frage.setVisible(true);
		return frage.getString();
}
nicht getestet bin grad verwiert
 
Alt 27.10.2007, 14:33   #5
anfänger15
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

ok hab es getestet hier mal ein vollständig compilierbares beispiel
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;




public class Test {
	


public static void main(String[] args){
Test t = new Test();
 CFrageDialog dialog= new CFrageDialog(null, "Ihr Text");
System.out.println(dialog.showDialog());
System.out.println("falsch wenn es vor showDialog kommt");
}

		class CFrageDialog extends JDialog implements ActionListener {

			private JTextField eingabefeld;

			private JButton oK, abbruch;

			private String textEingabe;

			// der Konstruktor
			CFrageDialog(JFrame f, String titel) {
				super(f, titel, true); // Konstruktor der Basisklasse aufrufen
				setResizable(false);

				setLayout(new BorderLayout());

				// es werden 2 Panels angelegt. Das eine enthält das TextField,
				// das andere die Buttons
				JPanel panel1 = new JPanel();
				JPanel panel0 = new JPanel();
				panel0.setLayout(new BorderLayout());
				JLabel label = new JLabel(" Ihr Text:");
				panel0.add("West", label);
				eingabefeld = new JTextField(50);
				add("North", panel0);

				panel1.add(eingabefeld);
				add("Center", panel1);

				JPanel panel2 = new JPanel();
				oK = new JButton("OK");
				abbruch = new JButton("Abbruch");
				panel2.add(oK);
				panel2.add(abbruch);
				add("South", panel2);

				pack(); // Anordnung der Oberflächenelemente auf bevorzugte
				// Größe initialisieren

				// das Maus-Handling für die Buttons macht die Klasse
				// selbst, also bei sich selber registrieren
				oK.addActionListener(this);
				abbruch.addActionListener(this);

				// Fenster schließen = Fenster verbergen
				setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
			}

			public void actionPerformed(ActionEvent e) {
				String label;

				label = e.getActionCommand();

				if (label.equals("Abbruch")) {
					textEingabe = null;
					setVisible(false);
					return;
				}

				if (label.equals("OK")) {
					textEingabe = eingabefeld.getText();
					setVisible(false);
					return;
				}
			} // Ende von 'ActionPerformed'

			public String getString() {
				return textEingabe;
			}

public String showDialog(){
	 
		
		this.setVisible(true);
		return this.getString();
		
	

}	
		}


	}
so müsste es funktionieren

//edit: so ist es doch eine membervariable von CFrageDialog oder ?
 
Alt 27.10.2007, 16:55   #6
Evolver
Themenstarter
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

Tut mir leid, dass ich deine Mühen so abtue, aber so bekomme ich das auch hin. die showDialog-Methode soll ja einer Member-Methode des Dialogs sein, und nicht irgendwo anderes definiert. Darum habe ich ja geschrieben, es sollte z.B. so wie bei JFileChooser sein.

Wo könnte man sich denn den OrginalCode von JFileChooser ansehen? Habe danach gegooglt, aber das passende Ergebnis nicht gefunden.
 
Alt 27.10.2007, 16:59   #7
Wildcard
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

Zitat: Evolver
Wo könnte man sich denn den OrginalCode von JFileChooser ansehen? Habe danach gegooglt, aber das passende Ergebnis nicht gefunden.
Von Sun runterladen, wo auch sonst.
Je nach OS ist der auch direkt dem JDK beigelegt (src.zip).
Der relevante Teil ist Dialog#show() und das ist auch die Lösung deines Problems.
Ruft man show auf einem modalen Dialog auf, blockiert der Aufrufer solange bis der Dialog verschwindet.
 
Alt 27.10.2007, 17:16   #8
anfänger15
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

sun schreibt dazu aber
Zitat:
Deprecated. As of JDK version 1.1, replaced by setVisible(boolean).
somit sollte man doch setVisible benutzen also war meins doch gar nicht so falsch oder :?:


//edit: der Code von JFileChooser#openDialog();

Code:
    public int showDialog(Component parent, String approveButtonText)
        throws HeadlessException {
	if(approveButtonText != null) {
	    setApproveButtonText(approveButtonText);
	    setDialogType(CUSTOM_DIALOG);
	}
	dialog = createDialog(parent);
	dialog.addWindowListener(new WindowAdapter() {
	    public void windowClosing(WindowEvent e) {
		returnValue = CANCEL_OPTION;
	    }
	});
	returnValue = ERROR_OPTION;
	rescanCurrentDirectory();

	dialog.show();
	dialog.dispose();
	dialog = null;
	return returnValue;
    }
ist bis auf show und setVisible doch ziemlich ähnlich
 
Alt 27.10.2007, 17:19   #9
Wildcard
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

Richtig. Unter der Haube macht es keinen Unterschied, setVisible ruft einfach show auf.
Der Dialog muss lediglich modal sein. Dann macht man sich eine Methode im abgeleiteten Dialog:
MyReturnValue showFooBarDialog()
die setVisible aufruft und fertig.
 
Alt 27.10.2007, 17:42   #10
Evolver
Themenstarter
 
eine 'showDialog'-Methode erstellen - Standard AW: eine 'showDialog'-Methode erstellen

Manchmal frage ich mciht, warum ich es mir so schwer mache.
Ganz am Anfang hatte ich einfach:
Code:
	public int openDialog()
	{
		this.setVisible(true);
		return 123;   // Testwert
	}
...und habe mir dort, wo der Dialog aufgerufen wird, den Rückgabewert ausgeben lassen. Das passierte natürlich - so wie es sein sollte - nachdem der Dialog geschlossen wurde. Ich bin einfach davon ausgegegangen, dass die Methode zuende bearbeitet wird und danach blockiert (sozusagen an der stelle des Aufrufens). Dass das Blockieren direkt in der Methode stattfindet wollte mir nicht in den Sinn kommen .

Also wieder ein Problem, wo eigentlich keines war. Danke.
 
Thema geschlossen    

Zurück   Java-Forum.org > Java - Programmierung > Java Basics - Anfänger-Themen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen: eine 'showDialog'-Methode erstellen

(Methoden) Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das?
Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das?: Hallo, kann man den Rückgabewert einer Methode als Parameter an eine andere Methode übergeben? private int Eingabe() { System.out.println("Bitte eine Zahl eingeben >> "); return...
Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.?
Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.?: Hallo liebes Forum, und zwar komme ich bei der Aufgabe nicht weiter, eine Methode zu schreiben die überprüft ob eine Matrix eine Diagonalmatrix ist. Ich habe schon folgenden Code geschrieben, der...
Eine mathematische Funktion als Argument für eine Methode - Matheparser?
Eine mathematische Funktion als Argument für eine Methode - Matheparser?: Hallo Ich benutze eine Klasse um Nullstellen zu suchen. Ein Intervall wird halbiert ,bis Nullstellen gefunden werden. Das Problem ist hier,dass ich nur eine Nullstelle finden kann, auch wenn die...
Prüfen, ob eine Methode eine andere überschreibt! WIE?
Prüfen, ob eine Methode eine andere überschreibt! WIE?: Hi, wie kann ich prüfen, ob eine beliebige Methode eine andere Methode überschreibt? :?: Meine Idee war, in einer Liste der Methoden der Superklasse nach dem Methodennamen der fraglichen...
eigene methode erstellen die eine Zufallszahl generiert.
eigene methode erstellen die eine Zufallszahl generiert.: Es gibt ja die Methode Math.random die eine Zufallszahl erstellt. Ich brauche auf dieser Basis eine Methode die eine Zufallszahl erstellt die nicht kleiner als 0 und nicht größer als 100 ist ohne das...




Sie betrachten gerade eine 'showDialog'-Methode erstellen