Veröffentlicht 30. Juli 200817 j Hallo, ich hab meine erste Oberfläche mit SWT gemaht, naja sagen wir angefangen. Ist ja auch gar nicht so schwer, aber wie kann ich zur Laufzeit weitere Komponenten zur Oberfläche hinzufügen? Ein ganz simples Beispiel zeigt mein Problem: public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout()); new Label(shell, SWT.PUSH).setText("bla"); shell.open(); new Label(shell, SWT.PUSH).setText("bla"); } Das erste Label wird angezeigt, das zweite nicht. Ich will bei meinem Programm aber Inhalte zur Laufzeit erst erzeugen bzw anzeigen. Da gibt es doch bestimmt einen Trick wie man das hinbekommt, oder?
30. Juli 200817 j Ich bin kein Guru, daher kann ich keine Garantie auf meine Aussage geben, aber ich meine, wenn du die Shell erstmal geöffnet hast, können keine Widgets mehr hinzugefügt werden. Du hast aber die Möglichkeit, die Sichtbarkeit deiner Komponenten über Methoden wie label.setEnabled (wenns nur ausgegraut werden soll) oder setVisible zu beeinflussen, vielleicht hilft dir das ja weiter? Gruß!
31. Juli 200817 j Ich bin kein Guru, daher kann ich keine Garantie auf meine Aussage geben, aber ich meine, wenn du die Shell erstmal geöffnet hast, können keine Widgets mehr hinzugefügt werden. Ja, so kam mir das auch vor. Aber das wäre ja sehr komisch. Bei keiner anderen Sprache ist das so und ich sehe erstmal hier auch keinen Grund warum man einem angezeigten Fenster nichts mehr hinzufügen kann. Das hilft mir nur sehr bedingt. Eigentlich sollten die Komponenten nach den Nutzereinstellungen angezeigt werden bzw neue hinzugefügt werden und entfernt, zur Laufzeit. Also keine einfachen Labels oder ähnliches, schon etwas komplexer dann Aber bin jetzt eh am überlegen das nich doch anders zu gestallten. Dennoch finde ich dieses Verhalten komisch. Das ist ja jetzt kein so absonderlicher Wunsch...
28. August 200817 j Hab eine Lösung gefunden, falls es jemand interessiert: display = new Display(); shell = new Shell(display); new Label(shell, SWT.PUSH).setText("bla"); shell.open(); new Label(shell, SWT.PUSH).setText("blubb"); shell.layout(); Also ein shell.layout() muss aufgerufen werden, damit die Änderungen angezeigt werden.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.