Dostep do widgetow SWT z innej klasy

0

Witam wszystkich
Mam taki o to problem nie moge zmienic zadnej wartoscii np buttonow, shella itp w oknie z innej klasy. Oto kod przykladowy kod pisany z pamieci wiec moga byc drobne bledy ale zalozenie jest to samo, czy da sie to zrobic z innej klasy i co robie zle ze nie moge tego wykonac:

class Test1 {

public Display display = new Display();

public static void main(String[] argv) {

Test2 test2 = new Test2();
test2.createWindow();

}

}

//----------------------------------------------------

class Test2 {

Shell shell2 = new Shell(Display.getCurrent());

public void createWindow() {

shell2.setSize(100,100);

shell2.setText("Test2");

shell2.open();

Test3 test3 = new Test3()
test3.createWindow2();

while (!shell.isDisposed())
if (!Display.getCurrent().readAndDispatch())
Display.getCurrent().sleep();

}

}

//-----------------------------------------------------

class Test3 {

Shell shell3 = Shell(Display.getCurrent());

public void createWindow2() {

shell3.setSize(100,100);

shell3.setText("Test3");

shell3.open();

Test2 test2 = new Test2()
test2.shell2.setText("TEXT KTORY I TAK SIE NIE ZMIENI!!");

}

}

0

w twojej klasie class3 masz taki kod:
Test2 test2 = new Test2()
test2.shell2.setText("TEXT KTORY I TAK SIE NIE ZMIENI!!");
wywołując new Test2 tworzysz nowy obiekt, który nie jest przcież tym samym, który został wywołany w main, a sądząc po kodzie tyko ten z maina zostanie wyświetlony, gdyż wywołuje metodę createWindow
napisy możesz zmieniać, ale dopiero po wywołaniu createWindow, która ustala własne napisy, i jak zmienisz przed tym, to i tak ci zamieni ;)
Test2 test2 = new Test2();
test2.createWindow();
test2.shell2.setText("TEXT KTORY I TAK SIE NIE ZMIENI!!");
taki kod powinien zmienić napis

0

To w jaki sposob moge zmieniac te wartosci ? ten kod to jest przyklad tylko, gdyz jest tak ze uruchamiam jedno okno ktore uruchamia drugie itd. I te ostatnie chce cos zmienic w pierwszym oknie ? zwracanie wartosci wiec nie wchodzi w gre :/

0

Czy jedynym sposobem bedzie przekazywanie referencji kazdego obiektu ktorego bede chcial uzyc w innej klasie ?

0

możesz to zrobić definiując test2 i test3 jako klasy wewnętrzne test1

ale rozumiem ze masz 3 osobne pliki z klasami,
udało mi się zmienić nazwę poprzez:

w calss1 definiujesz globalnie: public static Test2 test2=null;
które w main inicjujesz: test2=new Test2();
itd itd bez zmian.......

natomiast w test3 wywołujesz:
Test1.test2.shell2.setText("TEXT KTORY I TAK SIE NIE ZMIENI!!");
i powinien się zmienić
oczywiście w Test3 ani nigdzie indziej nie wywołujesz już
Test2 test2 = new Test2()
gdyż test2 jes już zajęte, wywołujesz np test2a, test2b.......

0

Super :)))))))) wielkie dzieki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1