Matze84
Eroberer
  
Dabei seit: 14.10.2012
Beiträge: 73
 |
|
| 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
|
|
16.12.2013 16:15 |
|
|
|
|
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);
}
}); |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
16.12.2013 18:25 |
|
|
Matze84
Eroberer
  
Dabei seit: 14.10.2012
Beiträge: 73
 |
|
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
(Studium halt)
deswegen: habt erbarmen mit mir
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Matze84: 17.12.2013 10:27.
|
|
17.12.2013 10:26 |
|
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
17.12.2013 16:13 |
|
|
Matze84
Eroberer
  
Dabei seit: 14.10.2012
Beiträge: 73
 |
|
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.
|
|
19.12.2013 18:13 |
|
|
Matze84
Eroberer
  
Dabei seit: 14.10.2012
Beiträge: 73
 |
|
|
22.12.2013 23:49 |
|
|
Matze84
Eroberer
  
Dabei seit: 14.10.2012
Beiträge: 73
 |
|
|
23.12.2013 02:00 |
|
|
|