Witam,
Najwyraźniej nie do końca poprawnie przedstawiłem problem. Rozwiązanie które zostało podane w poprzednim poście wydaje się działać dla dwóch "niezależnych" okien, natomiast ja chciałbym najpierw w jednym oknie mieć przycisk tworzący drugie, a potem w tym drugim robić jakąś zmianę w pierwszym.
W sumie napisałem dwa rozwiązania tylko wciąż nie wiem czy są poprawne, albo które jest lepsze :)
Oto one:
Pierwsze
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
public class FirstWindow {
Display display = new Display();
Shell shell = new Shell(display);
Text text;
Button b;
public FirstWindow() {
shell.setText("Nazwa okna");
shell.setMinimumSize(300, 400);
shell.setLayout(new GridLayout());
text = new Text(shell, SWT.None);
text.setText("To jest swt.wigdets.text");
/*
* to jest drugie okno otwierane w pierwszym
*/
class SecondWindow {
private Shell shellS;
private Button button;
public SecondWindow(Display parent) {
shellS = new Shell(parent);
shellS.setLayout(new FillLayout());
init();
}
private void init() {
button = new Button(shellS, SWT.NONE);
button.setText("Zmień coś w TestGUI");
button.addListener(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
setText("TestGUI.SecondWindow.button"); // zmiana tekstu
shellS.dispose();
}
});
shellS.pack();
shellS.open();
}
}
/*
* utworzenia nowego przycisu i zarejestrowanie listenera
*/
Listener list = new Listener() {
@Override
public void handleEvent(Event event) {
new SecondWindow(display);
}
};
b = new Button(shell, SWT.NONE);
b.setText("Nowe okno");
b.addListener(SWT.MouseDown, list);
shell.pack();
shell.open();
while( !shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public void setText(String s) {
text.setText(s);
}
public static void main(String[] args) {
new FirstWindow();
}
}
Drugie:
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
public class FirstWindow {
private Shell shell;
private Display display;
private Text text;
private Button button;
public FirstWindow() {
display = new Display();
shell = new Shell(display);
init();
}
private void init() {
shell.setLayout(new GridLayout());
button = new Button(shell, SWT.NONE);
button.setText("Stwórz nowe okno");
button.addListener(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
new SecondWindow(display, FirstWindow.this);
}
});
text = new Text(shell, SWT.NONE);
text.setText("FirstWindow.text");
shell.pack();
shell.open();
while( !shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public void setText(String s) {
text.setText(s);
}
public static void main(String[] args) {
new FirstWindow();
}
}
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;
public class SecondWindow {
private Shell shell;
private FirstWindow fw;
private Button button;
public SecondWindow(Display display, FirstWindow fw) {
shell = new Shell(display);
this.fw=fw;
init();
}
private void init() {
shell.setLayout(new FillLayout());
button = new Button(shell, SWT.NONE);
button.setText("Zmien coś w FirstWindow");
button.addListener(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
fw.setText("SecondWindow.button");
shell.dispose();
}
});
shell.pack();
shell.open();
}
}
Mam nadzieje że moderatorzy nie będą mieli mi za złe wklejanie dużej ilości kodu.
Z góry dziękuję za pomoc.
Pozdrowienia
Marcin