SWT Shell größe ändern...

lumo

Top Contributor
hallo,

ich möchte eine animation machen (sowas wie die expandbar nur an der aussenseite der shell) in der sich die shell vergrößert.
mein problem ist aber dass die animation nicht aktualisiert wird.
das heisst, die ausgabe in die console stimmt, aber die aktualisierung der shell wird erst durchgeführt, wenn die animation fertig ist...

ich habe den code in einen display.sync runnable ausgelagert und änder die größe der shell per setsize
danach rufe ich redraw auf.

wie kann ich das korrekt lösen? (async passiert das selbe!)

im prinzip sieht das so aus:
Java:
import java.util.Random;

public class FunnyShell extends Shell {

	private static Random r = new Random(System.currentTimeMillis());

	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			Display display = Display.getDefault();
			FunnyShell shell = new FunnyShell(display);
			shell.open();
			shell.layout();
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch()) {
					display.sleep();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the shell.
	 * 
	 * @param display
	 */
	public FunnyShell(Display display) {
		super(display, SWT.CLOSE | SWT.TITLE | SWT.BORDER);
		createContents();
	}

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("SWT Application");
		setSize(450, 300);
		getDisplay().asyncExec(new Runnable() {

			@Override
			public void run() {
				while (!isDisposed()) {
					try {
						Thread.sleep(1000);
						setSize(200 + r.nextInt(800), 200 + r.nextInt(600));
						redraw();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		});
	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
}
 
Zuletzt bearbeitet:

lumo

Top Contributor
So weit ich weiß wird mit syncexec der Display thread verwendet mit asyncexec sollte es ein zweiter thread sein;
Selbst wenn es ein thread ist sollte es die Shell nicht blockieren;
Es wird ja
Die Shell in der große geändert
Die Shell neu gezeichnet
Und das wiederholt...
 

Wildcard

Top Contributor
So weit ich weiß wird mit syncexec der Display thread verwendet mit asyncexec sollte es ein zweiter thread sein;
Selbst wenn es ein thread ist sollte es die Shell nicht blockieren;
Nein, in beiden Fällen führt der Display Thread das Runnable aus, das ist genau der Sinn von sync und async Exec. Der Unterschied ist:
bei syncExec wartet der aufrufende Thread bis der Display Thread das Runnable abgearbeitet hat, bei asyncExec tut er das nicht (fire and forget).
Da du ein Thread.sleep in deinem Runnable hast, blockierst du die Oberfläche und das darfst du natürlich nicht.
 

lumo

Top Contributor
na das macht doch sinn ;)

danke für den hinweis!
hier dann die korrekte version:
Java:
package tests;

import java.util.Random;

public class FunnyShell extends Shell {

	private static Random r = new Random(System.currentTimeMillis());

	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			Display display = Display.getDefault();
			FunnyShell shell = new FunnyShell(display);
			shell.open();
			shell.layout();
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch()) {
					display.sleep();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the shell.
	 * 
	 * @param display
	 */
	public FunnyShell(Display display) {
		super(display, SWT.CLOSE | SWT.TITLE | SWT.BORDER);
		createContents();
	}

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("SWT Application");
		setSize(450, 300);
		Thread t = new Thread(new Runnable() {

			@Override
			public void run() {
				while (!isDisposed()) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					getDisplay().syncExec(new Runnable() {

						@Override
						public void run() {
							setSize(200 + r.nextInt(800), 200 + r.nextInt(600));
						}
					});
				}
			}
		});
		t.start();
	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
T Shell entwickeln AWT, Swing, JavaFX & SWT 6
W SWT keybinding ESC bzw. [x] bei Shell (modal) AWT, Swing, JavaFX & SWT 2
W SWT, Shell - setMaximumSize AWT, Swing, JavaFX & SWT 2
lumo SWT Shell & Menu AWT, Swing, JavaFX & SWT 2
H shell in view implementieren; menu mit keystroke unterlegen AWT, Swing, JavaFX & SWT 8
hdi SWT Zwei mal Shell öffnen = Exception AWT, Swing, JavaFX & SWT 6
HaukeG SWT Grundsätzliches über Composites, Shell und Displays AWT, Swing, JavaFX & SWT 2
C SWT Shell update probleme - Mausbewegung nötig AWT, Swing, JavaFX & SWT 2
hdi SWT Shell: Auslagerung von Code verändert Verhalten AWT, Swing, JavaFX & SWT 6
M SWT Mutter-Shell blocken während Tochter-Shell noch offen ist AWT, Swing, JavaFX & SWT 6
E NoClassDefFoundError beim Starten einer Shell AWT, Swing, JavaFX & SWT 3
S SWT Lösen mit Shell, Container oder Group? AWT, Swing, JavaFX & SWT 5
M Shell vs. Composite AWT, Swing, JavaFX & SWT 3
V [SWT] Shell transparenz AWT, Swing, JavaFX & SWT 3
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
U Maximieren für SWT Shell unterbinden AWT, Swing, JavaFX & SWT 2
B SWT-Shell in den Vordergrund bringen AWT, Swing, JavaFX & SWT 2
T SWT - Inhalt einer Shell erst nach Größenänderung vorhanden AWT, Swing, JavaFX & SWT 5
C ApplicationWindow Shell minimieren (Anderes Event ausführen) AWT, Swing, JavaFX & SWT 4
I Shell aus einer Plugin-View öffnen . AWT, Swing, JavaFX & SWT 4
Z MessageBox ohne Shell öffnen - SWT AWT, Swing, JavaFX & SWT 7
P Icongröße von SystemIcons (aus shell) verändern?! AWT, Swing, JavaFX & SWT 3
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
Yonnig JavaFX Größe von WebView an Content anpassen AWT, Swing, JavaFX & SWT 3
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
L JavaFX AnchorPane an die Größe der Scene oder Window binden? AWT, Swing, JavaFX & SWT 3
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
R Größe von Scene und stage an grid anpassen AWT, Swing, JavaFX & SWT 4
M Java FX größe der shapes anpassen AWT, Swing, JavaFX & SWT 0
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
J Swing Pane im SplitPane automatische Größe aktivieren AWT, Swing, JavaFX & SWT 0
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
L JavaFX ListView Größe anpassen AWT, Swing, JavaFX & SWT 1
Neumi5694 Größe von Komboboxen neu berechnen AWT, Swing, JavaFX & SWT 3
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
I CSS - backgroundImage - Größe automatisch an den Container anpassen AWT, Swing, JavaFX & SWT 1
C Größe des Mauszeigers ermitteln AWT, Swing, JavaFX & SWT 5
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D JavaFX Alle Knöpfe auf die gleiche Größe AWT, Swing, JavaFX & SWT 14
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
F Gui weicht von Designpreview ab (kein fensterrahmen, andere größe) AWT, Swing, JavaFX & SWT 13
A JPanel größe verändern AWT, Swing, JavaFX & SWT 4
M SWT ScrollPane Größe zu klein AWT, Swing, JavaFX & SWT 6
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
S Swing JFrame hat nicht die Größe, die ich eingegeben habe AWT, Swing, JavaFX & SWT 3
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing Größe des Randes AWT, Swing, JavaFX & SWT 2
C LayoutManager JFrame größe und ausrichtung + Position von Fensterelementen AWT, Swing, JavaFX & SWT 2
B Swing JTable mit Daten - Reihen-Größe anpassen AWT, Swing, JavaFX & SWT 0
D SWT Window passt Größe nicht an AWT, Swing, JavaFX & SWT 4
N JPanel größe wissen/festlegen vor dem Anzeigen AWT, Swing, JavaFX & SWT 3
U Größe eines Button im Menü ändern AWT, Swing, JavaFX & SWT 1
G JavaFX Größe der Parentknoten AWT, Swing, JavaFX & SWT 5
R JPanel-Größe verändert sich nicht. Warum? AWT, Swing, JavaFX & SWT 5
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3
A JPanel oder GridLayout Größe festsetzten AWT, Swing, JavaFX & SWT 4
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
SimonRap Swing JFrame Größe zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Größe der JFrame Decorations herausfinden? AWT, Swing, JavaFX & SWT 4
O Swing Jpanel autom. auf JFrame Größe bringen AWT, Swing, JavaFX & SWT 6
M Swing JLabel mit fester größe nachträglich formatieren AWT, Swing, JavaFX & SWT 2
A JComponent Größe AWT, Swing, JavaFX & SWT 8
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
S Swing TextPane größe beschränken AWT, Swing, JavaFX & SWT 2
R Ellipse2D ändert Größe AWT, Swing, JavaFX & SWT 3
H Swing JButton größe ändern AWT, Swing, JavaFX & SWT 5
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
P JPanel Größe ändern AWT, Swing, JavaFX & SWT 22
I Größe eines rotierten Images AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben