Java - GUI - dynamisches ändern der Widgetgröße beim Fenster.Resize()

Neue Frage »

Auf diesen Beitrag antworten »
Matze84 Java - GUI - dynamisches ändern der Widgetgröße beim Fenster.Resize()

Hallo zusammen.

Ich bins mal wieder.

Ich habe in Java mit dem SWT eine GUI zu programmieren.

da drin habe ich
die shell
code:
1:
2:
3:
4:
shell = new Shell();
		shell.setSize(784, 616);
		shell.setText("SWT Application");
		shell.setLayout(new FormLayout());

ein Textfeld Widget
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
txtSuchtext = new Text(shell, SWT.BORDER);
		FormData fd_txtSuchtext = new FormData();
		fd_txtSuchtext.right = new FormAttachment(0, 191);
		fd_txtSuchtext.top = new FormAttachment(0, 10);
		fd_txtSuchtext.left = new FormAttachment(0, 10);
		txtSuchtext.setLayoutData(fd_txtSuchtext);
		txtSuchtext.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if(e.keyCode == SWT.CR){
					browserBrowser.setUrl(Wikipedia.getUrl(txtSuchtext.getText()));
					txtSuchtext.setText("");
				}
			}
		});


einen Button Widget
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
btnSuchen = new Button(shell, SWT.NONE);
		FormData fd_btnSuchen = new FormData();
		fd_btnSuchen.bottom = new FormAttachment(0, 31);
		fd_btnSuchen.right = new FormAttachment(0, 272);
		fd_btnSuchen.top = new FormAttachment(0, 10);
		fd_btnSuchen.left = new FormAttachment(0, 197);
		btnSuchen.setLayoutData(fd_btnSuchen);
		btnSuchen.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				browserBrowser.setUrl(Wikipedia.getUrl(txtSuchtext.getText()));
				txtSuchtext.setText("");
			}
		});
btnSuchen.setText("Suchen");

und ein Browser Widget
code:
1:
2:
3:
4:
5:
6:
7:
browserBrowser = new Browser(shell, SWT.NONE);
		FormData fd_browserBrowser = new FormData();
		fd_browserBrowser.bottom = new FormAttachment(100, -10);
		fd_browserBrowser.right = new FormAttachment(0, 758);
		fd_browserBrowser.top = new FormAttachment(0, 37);
		fd_browserBrowser.left = new FormAttachment(0, 10);
		browserBrowser.setLayoutData(fd_browserBrowser);


In der Wikipedia Klasse steht:
code:
1:
2:
3:
4:
5:
6:
public class Wikipedia {

	public static String getUrl(String _searchTerm){
		return "http://de.wikipedia.org/wiki/"+_searchTerm;
	}
}


nun möchte ich, dass wenn ich das Fenster (shell) größer mache, dass das Browser Widget dadurch auch automatisch größer wird.
(bisher funktioniert das nur für die Höhe)

Vielleicht kann mir jmd das Prinzip erklären oder einen Link geben, damit ich dass dann verstehe und selbst umsetzen kann...

Lg Matze
 
Auf diesen Beitrag antworten »
eulerscheZahl

Hallo,
ich konnte meinen Vorschlag leider nicht testen (Cannot load 32-bit SWT libraries on 64-bit JVM, ich bin zu faul, die passende Einstellung zu finden), aber was mir spontan einfällt:
Das Resize-Event der entsprechenden Komponente - hier also der shell - abzufangen.
etwa so (Quelle java2s.com):
code:
1:
2:
3:
4:
5:
  shell.addListener (SWT.Resize,  new Listener () {
    public void handleEvent (Event e) {
      fd_browserBrowser.setSize(shell.getSize().x - delta_x, shell.getSize().y - delta_y);
    }
  });
Auf diesen Beitrag antworten »
Matze84

sowas ähnliches habe ich mir schon gedacht...
wie sähe denn dabei dein delta_x bzw delta_y genau aus?
Also wo kommt das her? (oder hat dieses handleEvent das automatisch!?)
(habe noch nicht geschafft reinzuschauen, das werde ich erst heute Abend schaffen)


Ich wollte aber, dass auch der Button und der Text kleiner wird, damit es auf allen Auflösungen/Display-Größen annähernd gleich aussieht, weil wenn ich das Fenster ziemlich klein mache, verschwindet irgendwann der Button.
(Ich weiß das hab ich im Ursprungsthread nicht so formuliert)

Ich hatte gehofft dass es ein LayoutManager gibt der da ein paar Einstellungen benötigt, damit er das "von allein" macht.

Sprich: sich alle Widgets holt und alle entsprechend verkleinert.

Mir würde auch reichen, dass dann am Rand solche Scrollbars auftauchen, damit das ganze hin und her geschoben werden kann.



PS: wie ihr sicher bemerkt habt, bin ich neu in der GUI-Programmierung und Java kenne ich auch erst ca 5Monate verwirrt (Studium halt)
deswegen: habt erbarmen mit mir Gott
Auf diesen Beitrag antworten »
eulerscheZahl

delta_x und delta_y waren von mir als Platzhalter für eine feste Zahl in Pixeln gedacht.

In html werden gerne relative Größen angegeben, abgestimmt auf die Bildschirmgröße bzw. Fenstergröße.
Ich Java dann so:
fd_browserBrowser.setSize((int)shell.getSize().x * 0.75), (int)(shell.getSize().y * 0.80));

Von einer Möglichkeit, das automatisch anzupassen weiß ich nichts, was aber nicht heißen muss, dass es das nicht gibt.
 
Auf diesen Beitrag antworten »
Matze84

das funktioniert schon mal gut!
Danke....

da müsste es aber auch noch was über die LayoutManager geben, weil es am Ende unseres Aufgabenblockes mehr oder weniger so verlangt wird.
Auf diesen Beitrag antworten »
Matze84

Ich habe endlich rausgefunden, wie das "automatische" Resize von Widgets geht, mittels Layouts...


Die Seite ist auf englisch, aber wie ich finde trotzdem sehr gut zu verstehen, nachzuvollziehen, weil es reichlich Beispiele gibt.

http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layo
uts/index.html
Auf diesen Beitrag antworten »
Matze84

So ich bin immernoch bei meiner GUI
(gott sei Dank fast fertig)

Aber ich habe im Moment ein Problem...

Im Quickstarter von eclipse, wo er es nicht compilet und quasi nur schnell anzeigt, wie es aussieht, sieht mein Program so aus:
Bild 1
So soll es auch aussehen!

Wenn ich dann aber starte (also Run As java Application)
sieht das Programm erstmal so aus.

Bild 2
Das Browser-Widget überdeckt quasi den Synonym-Teil in der "sashForm"

Erst wenn ich die Größe des Fensters ändere, sieht es so aus, wie es soll.

hier ist mal der Code (für die Darstellung)

Ich habs in eine textDatei gepackt, weil es sonst ein bisschen viel wäre.

Code zum Projekt

Vielleicht weiß, sieht, findet jemand herraus woran das liegen könnte.
Auf diesen Beitrag antworten »
Matze84

Fehler gefunden Zunge raus LOL Hammer böse großes Grinsen

In Zeile 161 der ResizeListener, den du (eulersche Zahl) mir geschrieben hast, hat das so verschoben, ich hatte nur vergessen ihn zu löschen.

Dann mal Gute Nacht. Tanzen
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »