SWT: GUI öffnen und schließen

marcap

Mitglied
Hey,

Ich habe im Grunde ein Konsolenprogramm, mithilfe dessen ich bei bedarf eine GUI startet. Nun die GUI starten tu ich aus der Hauptapplikation mit GUI.main()!

Nun habe ich auf der GUI ein Button angelegt der auf Knopfdruck die GUI schließen soll, die Main der GUI soll allerdings vorher noch eine Variable zurückgeben. Die Main sieht folgendermaßen aus:

Code:
	/**
	* Auto-generated main method to display this 
	* org.eclipse.swt.widgets.Composite inside a new Shell.
	*/
	public static String main(String doc) {
	
		Display display = Display.getDefault();
		Shell shell = new Shell(display);
		Config inst = new Config(shell, SWT.NULL);
		Point size = inst.getSize();
		shell.setLayout(new FillLayout());
		shell.layout();
		if(size.x == 0 && size.y == 0) {
			inst.pack();
			shell.pack();
		} else {
			Rectangle shellBounds = shell.computeTrim(0, 0, size.x, size.y);
			shell.setSize(shellBounds.width, shellBounds.height);
		}
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		
		return doc;
	}
Also soll doc zurückgegeben werden udn dann die GUI beendet! Der "Grundcode" von meinem Button sieht so aus:

Code:
	private void exitMenuItemWidgetSelected(SelectionEvent evt) {
		System.out.println("exitMenuItem.widgetSelected, event="+evt);

	}

Allerdings habe ich keine Ahnung was in den Button reinsoll, da ich kein zugriff auf die in der Main angelegten Objekte display und shell habe?

Wäre dankbar für ein bisschen Nachhilfe
Gruß
 
Wenn du die Variablen außerhalb der Klasse deklarierst, hast du Zugriff auf sie.
Also so:

Klassenbeginn
Java:
public Display display;
public Shell shell;

und dann kannst du sie in der Main initialisieren:
Java:
display = new Display();
shell = new Shell(display);
shell.setSize(600, 400);

und somit kannst du auch von anderen Klasen aus auf diese zugreifen.
 
Gut habe ich gemacht, allerdings wenn ich in dem Button direkt display.dispose() aufrufe, kommt bei mir eine NullPointerException in thread "main"!
 
Am besten poste mal ein wenig Quellcode.
Generell kannst du es entweder so machen, dass du die Variable beim Aufruf der Klasse übergibst.
Oder du machst es so:
Klasse name = new Klasse();
name.display ......
 
Allerdings habe ich keine Ahnung was in den Button reinsoll, da ich kein zugriff auf die in der Main angelegten Objekte display und shell habe?

Wäre dankbar für ein bisschen Nachhilfe
Gruß

Deklariere es so wie Tobias schon sagte. Außerhalb des Konstruktors:
Java:
Display display;
Shell shell;

Dann in Deiner Main:
Java:
display = Display.getDefault() oder .getCurrent();
shell = new Shell(display);

Und beim SelectionListener des Button:
Java:
shell.dispose();
 
Zuletzt bearbeitet von einem Moderator:
Zurück