SWT - widget dynamisch erzeugen und anzeigen

Choleriker

Mitglied
Hey,

mit SWT möchte ich bei Klick auf einen Knopf ein neues Widget erzeugen und anzeigen lassen.
Ich habe bereits einen Listener registriert und das Ereignis wird auch ausgelöst. Das neue Widget (im Testfall ein Label) wird auch erzeugt, aber nicht angezeigt.

Code:
public void addLabel() {
		Label newLab = new Label(outerOrderComp, SWT.None);
		newLab.setText("test");
		newLab.setVisible(true);
	}

Im Testfall ist es ein Label, aber eigentlich soll es ein Composite mit mehreren Widgets sein.
Ich habe im Forum gesehen, dass es das gleiche Problem schon mit Swing gab und wohl mit dem Aufruf von validate() gelöst wird. Aber wie funktionierts mit SWT?


Was mache ich falsch?

VG
 

Sonecc

Gesperrter Benutzer
Du musst die Composite (ggf. auch dessen Parent) zu einem layout auffordern.
also in deinem Fall:

Java:
outerOrderComp.layout(true, true);
 

Choleriker

Mitglied
hm, erstmal danke für den Hinweis.
Ich führe

layout(true, true);

für das umliegenden Composite, dessen umschließende Gruppe und der Shell aus, aber das Label wird immer noch nicht angezeigt. Woran liegt das denn? Das Event wird wirklich ausgelöst.

Nebenbei: das umliegende outerOrderComp hat ein FillLayout.

Muss ich noch irgendwie update oder ähnliches ausführen? Wieso steht so etwas nicht mal in einem Tutorial?

VG
 
Zuletzt bearbeitet:

Sonecc

Gesperrter Benutzer
Also ich selbst hab das mal machen müssen und hab da auch etwas frickeln müssen, weil es schwer ist etwas vergleichbares zu finden.
Ich musste bei mir aber auch die Controls, die dem Composite angehängt waren löschen und neue anhängen.
Das mache ich wie folgt:

- Alle Children des Composites disposen (sollte für dich nicht nötig sein)
- Alle neuen Controls anhängen (Im prinzip so wie du es getan hast)
- Layout neu setzen (könnte bei dir eventuell auch noch helfen)
- Parent der composite zum relayout auffordern (machst du ja mehrfach)

Versuchs also mal damit das Layout neu zu setzen und rufe dann nochmal layout(true, true) auf
 

Choleriker

Mitglied
Also, ich teste es jetzt so
Java:
	public void addLabel() {
		Label newLab = new Label(outerOrderComp, SWT.None);
		newLab.setText("test");
		newLab.setVisible(true);
		outerOrderComp.setLayout(new FillLayout(SWT.HORIZONTAL));
		outerOrderComp.layout(true, true);
		grpOrders.layout(true, true);
		shlTailorshop.layout(true, true);
	}

Aber auch hier nix. Ist es irgendetwas banales, das ich übersehe?
Kann doch nicht sein, dass ich alle umliegenden Layouts (FormLayout) neu setzen muss, oder?

Ist das nicht etwas halbwegs gängiges zur Laufzeit ein Label zu erzeugen? Habe schon einiges gesucht, aber anscheinend falsch.
 

Sonecc

Gesperrter Benutzer
Folgendes funktioniert bei mir problemlos:

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class DynamicCompShell {

	public static void main(String[] args) {
		Display display = Display.getDefault();
		Shell shell = new Shell(display);
		shell.setLayout(new FillLayout(SWT.HORIZONTAL));

		Group grpTest = new Group(shell, SWT.NONE);
		grpTest.setText("Test");
		grpTest.setLayout(new FillLayout(SWT.HORIZONTAL));

		Composite btnComp = new Composite(grpTest, SWT.NONE);
		btnComp.setLayout(new FillLayout(SWT.HORIZONTAL));
		final Composite labelComp = new Composite(grpTest, SWT.NONE);

		Button btnAdd = new Button(btnComp, SWT.NONE);
		btnAdd.addSelectionListener(new SelectionAdapter() {

			@Override
			public void widgetSelected(SelectionEvent e) {
				addLabel(labelComp);
			}
		});
		btnAdd.setText("Add");

		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}

	}

	public static void addLabel(Composite labelComp) {
		Label newLab = new Label(labelComp, SWT.None);
		newLab.setText("test");
		newLab.setVisible(true);
		labelComp.setLayout(new FillLayout(SWT.HORIZONTAL));
		labelComp.layout(true, true);
	}
}
 

Choleriker

Mitglied
Danke für das ausführliche Beispiel. Momentan kann ich aber nicht erkennen, warum das Beispiel funktioniert (das geht bei mir auch), mein Code aber nicht.

Ich habe einen Controller mit einer Methode registerListeners (Auszug):
Java:
window.getNewOrderBtn().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseUp(MouseEvent e) {
				window.addLabel();
			}
		});

window ist vom Typ der GUI. Der Controller ruft die open Methode der GUI, die wiederum createContents() ruft und danach die Ereignisschleife startet.

und dann die GUI (Auszug):
Java:
	public void addLabel() {
		Label newLab = new Label(outerOrderComp, SWT.None);
		newLab.setText("test");
		newLab.setVisible(true);
		outerOrderComp.setLayout(new FillLayout(SWT.HORIZONTAL));
		outerOrderComp.layout(true, true);

	}

Ich teste auch in addLabel() den Text der umschließenden Gruppe zu ändern. Nix.
 

Stelufl

Mitglied
Gib mal bitte etwas mehr Code. Das Label wird erzeugt, ja, ist sicherlich auch auf deiner Shell, ist aber nicht sichtbar/ist versteckt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H RCP(SWT) Browser-Widget zeigt keine locale HTML-Dateien an AWT, Swing, JavaFX & SWT 1
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
Madlip SWT DateTime Widget Schließen AWT, Swing, JavaFX & SWT 4
S Nebula Widget CollapsibleButton AWT, Swing, JavaFX & SWT 2
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
T SWT Widget AWT, Swing, JavaFX & SWT 5
S SWT Wie bei Widget Text auf int prüfen bei Eingabe AWT, Swing, JavaFX & SWT 5
H SWT Uhr Widget AWT, Swing, JavaFX & SWT 2
P SWT Browser-Widget und Zwischenablage bzw. Strg+C AWT, Swing, JavaFX & SWT 5
W SWT DateTime Widget Local ändern AWT, Swing, JavaFX & SWT 7
J Applikation als Desktop-"Widget" AWT, Swing, JavaFX & SWT 2
R setEnabled bei eigenem Widget implementieren? AWT, Swing, JavaFX & SWT 3
DeeDee0815 SWT Text Widget: Zwischen Single und Password umschalten AWT, Swing, JavaFX & SWT 3
G Widget Netzwerk einbauen AWT, Swing, JavaFX & SWT 7
D Widget/Control während Laufzeit durch ein anderes ersetzen AWT, Swing, JavaFX & SWT 3
N [Suche] JTree Widget/Library. AWT, Swing, JavaFX & SWT 2
S AWT Komponenten in einem SWT Widget AWT, Swing, JavaFX & SWT 6
C JFrame ohne Minimize/Maximize-Widget AWT, Swing, JavaFX & SWT 7
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
Wurstsemmel SWT MenuItem dynamisch hinzufügen AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
S CombinedDomainXYPlot und dynamisch hinzugefügte subplots: Darstellungsprobleme AWT, Swing, JavaFX & SWT 3
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
llabusch JavaFX Dynamisch alles vergrößern (wie im Browser) AWT, Swing, JavaFX & SWT 3
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
I JTable dynamisch aus ArrayList befüllen AWT, Swing, JavaFX & SWT 3
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
T JPanel dynamisch erstellen AWT, Swing, JavaFX & SWT 4
G FormLayout dynamisch wachsend AWT, Swing, JavaFX & SWT 0
T JTable dynamisch mit ArrayList AWT, Swing, JavaFX & SWT 2
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
P TableViewerColumn dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
A HELP: JFieldText dynamisch setzen -> langsam AWT, Swing, JavaFX & SWT 19
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
P Gifs dynamisch auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
P Swing Dynamisch zeichnen mit Shapes wie Rectangle2D.Float ? AWT, Swing, JavaFX & SWT 6
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
X jTextFields dynamisch initialisieren AWT, Swing, JavaFX & SWT 2
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
H Swing Symbol in Taskleiste dynamisch aus- bzw. einblenden AWT, Swing, JavaFX & SWT 14
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
J Java 2D - dynamisch zeichnen AWT, Swing, JavaFX & SWT 4
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
P Dynamisch Sortieren AWT, Swing, JavaFX & SWT 2
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
Airwolf89 Swing Tabs dynamisch ausblenden AWT, Swing, JavaFX & SWT 3
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
S SWT WizardPage - Button anzeigen und Text-Widgets dynamisch aktualisieren AWT, Swing, JavaFX & SWT 12
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
W Swing dynamisch Buttons in JEditorPane erstellen AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
Spot84 jtable mit checkboxnode dynamisch per arraylist füllen AWT, Swing, JavaFX & SWT 8
bugmenot Dynamisch erzeugte jLabels werden nicht angezeigt. AWT, Swing, JavaFX & SWT 5
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
A JList dynamisch vergrößern AWT, Swing, JavaFX & SWT 4
G Felder dynamisch erzeugen! AWT, Swing, JavaFX & SWT 3
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
G Dynamisch Komponenten in einem JPanel bzw JFram austauschen AWT, Swing, JavaFX & SWT 7
B JTree dynamisch aufbauen AWT, Swing, JavaFX & SWT 3
L JPanel dynamisch zuweisen AWT, Swing, JavaFX & SWT 5
T Inhalt einer Combobox dynamisch erstellen? AWT, Swing, JavaFX & SWT 13
S JTextField-Größe dynamisch an Inhalt anpassen. AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
D Systray-Icon dynamisch zeichnen AWT, Swing, JavaFX & SWT 8
B JTree dynamisch nachladen AWT, Swing, JavaFX & SWT 3
U Label Icon dynamisch belegen AWT, Swing, JavaFX & SWT 12
F JRadioButton dynamisch benennen? AWT, Swing, JavaFX & SWT 7
A dynamisch weitere jpanels untereinander hinzufügen AWT, Swing, JavaFX & SWT 10
S dynamisch erzeugte buttons AWT, Swing, JavaFX & SWT 22
J Größe einer JTextArea dynamisch anpassen. AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben