Ersetzen eines confirm dialogs/ synchronisieren von methoden

Grimnir

Mitglied
Hallo zusammen!
Ich möchte gerade eine Methode ergänzen. Bis vor kurzen hat mir in dem Prog. ein Confirm Dialog mit YES_NO_CANCEL gereicht. Jetzt benötige ich noch einen vierten Button. Also hab ich mir eine entsprechende Klasse erstellt.
Das Problem dabei ist jetzt natürlich dass das Programm beim ausführen einfach nur die Methode aufruft ohne auf eine Antwort zu warten welcher Button geklickt wurde.
Wie wird den die Rückfrage bei Confirm Dialog z.B

Java:
 if (result == JOptionPane.YES_OPTION) {			
					
					System.out.println("Du hast JA gesagt");		
	
				}
realisiert?

Meine einzige Idee ist ein Thread der ständig ein Boolean prüft, welchen ich dann in der Fensterklasse entsprechend ändere. Das gefällt mir aber nicht wirklich und muss wie im Confirm Dialog ja auch anders zu realisieren sein.

Hier noch ein wenig Quelltext zum Verständnis:

Java:
for (int i = 0; i < wertuebergabe.size(); i++){
		for (int j = 0; j < Einlesen.Polypunkte.size(); j++){

if(eine_bedingung_die_vorher_berechnet_wird >= 0.5 ){

// Jetzt einfacher Aufruf der neu erstellten Methode

					AenlicherPunktFenster.AchtunngFenster(i,j);
	
					
					
////			Vorher Aufruf des Confirm Dialog

//			int result = JOptionPane.showConfirmDialog(null, text des Dialoges"
//					,"Achtung", JOptionPane.YES_NO_CANCEL_OPTION);
//			if (result == JOptionPane.YES_OPTION) {	
							
//				löschen(wertuebergabe.get(i).pnum);	
			
//			} else if (result == JOptionPane.NO_OPTION) {	

//				JOptionPane.getRootFrame().dispose();	

//		}else if (result == JOptionPane.CANCEL_OPTION) {									

//			return;						
//		} 
}}// ==> restlicher  Code welcher ausgeführt wird

Die Methode AenlicherPunktFenster.AchtunngFenster(i,j); ist ein einfaches Fenster mit vier Buttons.

Schönen Dank schon mal für die Hilfestellung


Gruß
Grimnir
 
Hier ist die Lektüre des Quellcodes von JOptionPane sehr empfehlenswert, da kann man gut abschreiben, wenn man das selber implementieren will. Bevor ich erkläre wie es dort gemacht wird, sei aber noch gesagt, dass JOptionPane auch eine Methode anbietet um einen Dialog mit einer beliebigen Anzahl von Buttons mit selbst definierten Texten bietet.

So und nun zu der Magie: JOptionPane verwendet die Methode JDialog.show(). Diese Methode Gibts zwar auch in JFrame, funktioniert dort aber anders, weil in bei einem JDialog blockt diese Methode solange, bis das Fenster geschlossen wurde. Wie das Swing/Awt intern macht frag lieber nicht, ich will es gar nicht wissen, aber auf jeden Fall funktioniert das auch auf dem EDT ohne diesen zu blocken.
 
Also ersteinmal schreibt man Variablen und Methoden per Konvention
Code:
lowerCamelCase

sprich

Java:
AenlicherPunktFenster.achtunngFenster(i,j);

ich gehen nun einfach mal davon aus das es sich um eine Statische Methode handelt, falls aber AenlicherPunktFenster eine Referenz auf ein Objekt einer anderen Klasse ist wird auch dies klein geschrieben.

Ein JOptionPane returned wie du der API Dokumentation entnehmen kannst eine Integer.
(Beispiel siehe unten), mit welchem du dann ganz bequem arbeiten kannst.

Du übergibst deinem optionPane einfach ein String array mit möglichen Optionen und erhälst nach Klick auf einen der Buttons einen Integer mit der Position des Strings im Array zurück anhand welchem der Button dann identifiziert wird und du dann in deiner Applikation z.B einen switch mit mehrerern cases nutzen kannst, hier mit einer Ausgabe des Buttons, bedenke aber das Arrays 0-Basiert sind und demnach der Integer der beim klick auf den ersten button zurückgegeben wird 0 ist !

Hier ein Beispiel :
Java:
public class Foo{
	
	public static void main(String[] args) {
	
		String[] options =  {"Yes", "No","Damn","Woot?!","crazy shit!"};
		String title = "Hey, ich bin ein Dialog!";
		String text = "Klick mich ich bin der Frühling";
		
		
		int result = JOptionPane.showOptionDialog(null, text, title, JOptionPane.INFORMATION_MESSAGE, JOptionPane.YES_NO_CANCEL_OPTION, null, options, null);
		
		switch(result){
		case 0 :
			System.out.println("Button 1");
			break;
		case 1 :
			System.out.println("Button 2");
			break;
			
			//usw...		
		}
    }
}
 
Zuletzt bearbeitet:
Perfekt!
Problem gelöst

Danke euch beiden

@ kaoZ
Also ersteinmal schreibt man Variablen und Methoden per Konvention lowerCamelCase

hast du natürlich Recht.

@ Kevin94

Die Lektüre des Quellcodes JOptionPane hab ich natürlich erstmal gesucht. Bin da aber nicht fündig geworden. Wo bekommt man die her?

Und richtig großen Dank für den Tippp:
Bevor ich erkläre wie es dort gemacht wird, sei aber noch gesagt, dass JOptionPane auch eine Methode anbietet um einen Dialog mit einer beliebigen Anzahl von Buttons mit selbst definierten Texten bietet.

weil einfach einfach einfach ist.

mit dem JDialog.show() is aber auch gut zu wissen.

Danke euch!
 
Wenn du das JDK installiert hast, befindet sich im Installationsverzeichnis eine Datei src.zip mit dem Quellcode aller offiziellen Klassen, der ist für viele Suchen hilfreich. Manchmal sucht man sich aber auch zu Tode, weil alle Referenzen irgendwann zu Klassen aus den nichtöffentlichen sun.* Packages führen.
 

Zurück
Oben