SWT unelegant? Problem mit Listener.eventHandle(Event e)

Status
Nicht offen für weitere Antworten.

pocketom

Bekanntes Mitglied
Hallo,

nachdem ich nun schon ewig geooglet habe und es einfach nicht hinbekomme, versuche ich mein kniffliges problem mal hier zu schildern:

hier der Code(gibt natürlich Fehler)
Code:
public static boolean getResult() 
{		
		
	boolean result = false;
	
	final Shell dialog = new Shell (shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
					
	final Button ok = new Button (dialog, SWT.PUSH);
	ok.setText ("OK");
		
	Button cancel = new Button (dialog, SWT.PUSH);
	cancel.setText ("Cancel");
		
								
	Listener listener = new Listener () {
			
		// hier liegt das Problem.....
		public void handleEvent (Event event) {
			
			if(event.widget == ok)
				result = true;
					
			dialog.close ();
		}
	};
			
	ok.addListener (SWT.Selection, listener);
	cancel.addListener (SWT.Selection, listener);

	dialog.open ();
		
	while (!dialog.isDisposed ()) {
		if (!display.readAndDispatch ()) display.sleep ();
	}		
	return result;					
}

Was ich haben möchte ist eigentlich sehr simple: Die Funktion soll einfach wenn Sie aufgerufen wird, ein neues modales Fenster öffnen, mit 2 Buttons und je nachdem ob man "OK" oder "Cancel" geklickt hat, soll die funktion true oder false zurückliefern.
Leider kreige ich das aber nur sehr unelegant hin da:

- es gibt nur "void" handleEvent(Event e), ich bräuchte aber "boolean" handleEvent(Event e) um den jeweiligen Rückgabewert von meiner Hauptfunktion getResult() zurückliefern zu lassen
- in handleEvent(Event e) kann ich nicht auf meine Funktionsvariable "result" zugreifen, es sei den ich mache sie "final" (dann kann ich sie aber nicht mehr verändern)

Es bleibt mir also im Moment nur eine globale Variable zu verwenden, was mir aber absolut zuwider ist, zumal ich viele davon brauchen werde.... kann mir irgendwer helfen? Bin mit meinem Latein am Ende. Oder steh ich einfach nur auf dem Schlauch??? :oops:
 

byte

Top Contributor
Modale Dialoge brauchst Du Dir nicht händisch zusammenfrickeln.

Machs doch einfach so:

Code:
return new MessageBox(shell, SWT.OK | SWT.CANCEL).open() == SWT.OK;
 

pocketom

Bekanntes Mitglied
Ahh cool! Danke!

Aber wie sieht es aus wenn meine Dialoge etwas umfangreicher gestaltet werden sollen? Das mit "Ok", "Cancel" war jetzt nur als Beispiel gedacht... Normal hab ich noch diverse Eingabefelder, Radiobuttons, usw...
 

pocketom

Bekanntes Mitglied
Danke für den Tipp, habs mir grade angesehen. Für einen einfachen Confirmation Dialog reicht das, aber für meine Zwecke leider nicht. Ich benötige Dialoge die dem User mehrere Eingabefelder zur Verfügung stellen, wie z.B. Textfelder, Radiobuttons, Checkboxes, usw... das muss auch alles individuell gestaltet werden. Die MessageBox gibt das leider nicht her.
Kennst du vielleicht noch einen anderen Ansatz für mein Problem? Ich muss einerseits verschiedene Eingaben in den Dialogen erfassen, andererseits brauche ich auf jeden Fall die Info ob der User abschliessend auf "OK" oder "Cancel" geklickt hat, weil das für die Weiterverarbeitung der soeben eingegebenen Daten genau in diesem Moment bekannt sein muss, und zwar ausserhalb von "void handleEvent(Event e)".... Ich möchte es auf jedenfall vermeiden für jeden Dialog globale boolsche Variablen anlegen zu müssen! Das muss doch irgendwie auch schick, elegant und vor allem sicherer gehen? Oder bin ich einfach nur zu doof? ???:L


EDIT:

ich habs jetzt mal so "gelöst", leider komme ich einfach nicht um globale Variablen herum:

Code:
Listener listener = new Listener () {
			public void handleEvent (Event event) {
				if(event.widget == ok)
					regfile.printTags(mainlog,Integer.parseInt(temp[0].getText()));							
				
				dialog.close ();
			}
		};

temp[] ist ein globales Array vom Typ Text[]. temp[0] ist das Textfeld das ich innerhalb des modalen Dialogs verwende, der benutzer gibt hier eine Zahl ein. Die wird als Aufrufparameter für meine Funktion printTags(Text t, int n) benötigt. Es funktioniert so aber ich finde das ist einfach extrem unelegant und dürfte mit steigender Anzahl an Dialogen schnell unübersichtlich und fehleranfällig werden. mann, so hab ich das nicht gelernt, man hat mir beigebracht sowas tunlichst zu vermeiden, aber hier weiss ich echt nicht wie. Wie geb ich dem Listener zw. dem handleEvent etwas mit???? :cry:
 

schalentier

Gesperrter Benutzer
Mal wieder ein Fall fuer MVC (Model View Controller).

Dein Dialog ist der View, der schreibt Daten in ein Model (entspricht deinem komischen temp Array) und wird zusammengesetzt vom Controller (das ist deine Methode und handleEvent()).

Wenn du das ganze jetzt ein bisschen entkoppelst, sollte das alles auch funktionieren. Im handleEvent() brauchst du Zugriff auf eine Modellklassen-Instanz (im Konstruktor des Listeners uebergeben, dann brauchste ne eigne Klasse fuer den Listener/Controller - bietet sich an). Dieses Model kannst entweder der Methode uebergeben, oder von der Methode zurueckliefern lassen.

Bisschen Code:
Code:
public boolean getResult(final ResultModel resultModel) {
  // ...
  Listener listener = new Listener() {
    public void handleEvent(Event e){
      //..
      resultModel.setResult( true ); //[*]
      resultModel.setOkay( true );
    }
  }
  //...
  return resultModel.getOkay();
}

[*] resultModel is final Parameter, d.h. resultModel selbst, darf nicht auf eine neue Instanz gesetzt werden, Zugriffe funktionieren aber ganz gut - dennoch, pack das alles in eine eigne Klasse und uebergib das Model im Konstruktor
 

byte

Top Contributor
Am sinnigsten schreibt man Custom Dialoge, indem man die Klasse Dialog erweitert. Wenn Du viele Informationen aus dem Dialog zurückgeben willst, dann schreib Dir einfach einen Datencontainer, in dem alle nötigen Daten gespeichert werden. Im Dialog werden dann die Daten in diesem Container gemäß den Angaben des Benutzers gesetzt und dieser am Ende als Rückgabewert zurückgegeben.
 

byte

Top Contributor
Jein. Es gibt viele SWT-Klassen, von denen man nicht ableiten soll/ darf.

Dialog aber ist abstrakt und explizit zum Ableiten gedacht. Steht auch alles in der API...
 

pocketom

Bekanntes Mitglied
Also, von der Klasse Dialog ableiten tut es einwandfrei. Sieht ordentlich aus, lässt sich schön flexibel einsetzen und eröffnet neuen Raum für kreative Ideen. Dialoge sollte man wirklich so aufbauen. Danke für die Hilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Problem mit TextField.requestFocus(); AWT, Swing, JavaFX & SWT 17
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
B JavaFX Problem bei Kamera / Group, gesamte Scene bewegt sich mit AWT, Swing, JavaFX & SWT 0
L Swing Vier Gewinnt Problem AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen


Oben