Layoutprobleme (swing)



  • hi

    is komplizierte sache. also TEIL1:

    Label1 Button1
    Label2
    TextBox
    Button2 Button3

    List

    nehmen wir die obige konstellation und denken uns die entsprechenden Swingkomponenten. bei der konstellation bietet sich das GridBagLayout (sollte man zumindest meinen)

    Problem nummer eins: aus mir unerfindlichen Gründen werden in der ersten Zeile
    das Label und der Button nicht gleich groß sondern unterschiedlich groß dargestellt. der Button entsspricht dabei ca. der 1,5 fachen länge des labels.
    laut meinen Buch wird das ganze über raster gemacht wobei ich jedem element sozusagen mitteile welche raster es belegen darf. da die Raster gleichgroß sind
    sollten auch die elemente gleichgroß sein, zumindest nach meiner Auffassung.

    Problem nummer zwei: weiterhin ist mir nicht begreiflich warum die liste immer mit einer bestimmten mindestbreite dargestellt wird. jedweder versuch über Gridbag&Constrain da was einzuschränken scheiterte. so richtig lustig wird es an wenn man feststellt das die liste die ohnehin schon asymetrischen größenverhältnisse weiter ins verderben reiss.kein plan!

    jetz zum code und zur umsetzung:

    [java] JPanel panelButtonLayout = new JPanel(new GridBagLayout());

    GridBagLayout gridbagLayout = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();

    c.fill = GridBagConstraints.BOTH;

    panelButtonLayout.add(new JLabel("File Name"), c); //Label1

    c.gridwidth = GridBagConstraints.REMAINDER;
    panelButtonLayout.add(Button1,c);

    c.gridwidth = 2;
    c.gridwidth = GridBagConstraints.REMAINDER;
    panelButtonLayout.add(new JLabel("Character Name"), c);

    c.gridwidth = GridBagConstraints.REMAINDER;
    panelButtonLayout.add(TextBox, c);

    c.gridwidth = 1;
    panelButtonLayout.add(Button2, c);

    c.gridwidth = GridBagConstraints.REMAINDER;
    panelButtonLayout.add(Button3, c);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridheight = 4;
    c.gridwidth = 1;
    c.gridwidth = GridBagConstraints.REMAINDER;
    panelButtonLayout.add(List,c); // bzw die ScrollPane-> nur Bsp!

    // das ganze dann an die ContentPane:

    this.getContentPane().add(panelButtonLayout, BorderLayout.EAST);[/code]

    so hier noch mal die probs:

    1. Label und button (bzw. alle Elemente die nebeneinander plaziert sind) werden unterschiedlich lang dargestellt.
    2. Die Liste(JList) lässt sich ums verrecken nicht schmaler darstellen, wie ändere ich das ????
    3. wenn ich das fenster vergrößere sollen alle elemente ihre größe beibehalten, AUßER DER LIST, sie soll in der Größe (horizontal) angepasst werden. geht das überhaupt ?

    es kann auch sein das mit dem GridBag oder BorderLayout irgendwas nich so ganz Tacco ist, irgendwelche bugs bekannt ?

    ich weiss das man das auch über verschachtelte Layouts regeln kann, hatt ich auch bisher, dachte mit Gridbag gehts einfacher. ausserdem is da immer noch der mist mit der Liste, ich dachte ich bekomme das mit GridbagLayout weg.
    danke fürs lesen und die Hilfe.

    pain

    [ Dieser Beitrag wurde am 22.01.2003 um 08:56 Uhr von pain_md editiert. ]

    [ Dieser Beitrag wurde am 22.01.2003 um 08:57 Uhr von pain_md editiert. ]


  • Mod

    1. Label und button (bzw. alle Elemente die nebeneinander plaziert sind) werden unterschiedlich lang dargestellt.

    Gib ihnen ein eigenes Panel, auf dem du ein GridLayout einsetzt.

    3. wenn ich das fenster vergrößere sollen alle elemente ihre größe beibehalten, AUßER DER LIST, sie soll in der Größe (horizontal) angepasst werden. geht das überhaupt ?

    Ja, das geht. ...und zwar mit den weight-Variablen von den GridBagConstraints. Setze sie auf 0.0 bei Komponenten, die nicht in die entsprechende Richtung vergrößert werden sollen. ...ich bin mir aber nicht sicher, ob das schon ausreicht. Ich habe damit auch immer Probleme.

    BTW : Ich glaube, es ist nicht gut, bei allen Komponenten die selben Constraints zu nehmen. Nimm besser überall neue.


  • Mod

    Bei der Liste kannst du mal Methoden, wie setPreferredSize und setMinimumSize ausprobieren.



  • hi

    man da freu ich mich ja doch noch wer geantwortet hat. hast soweit mit allem recht und mir also geholfen *freu*. auf die idee mit den eigenen panels für label/button bin ich selbst noch nicht gekommen, mussich mir merken.
    bei der liste *beeeeeeep* naja fast. was ich nich wusste: in der liste kannst du die größe der cells einstellen. ja, das sollte man denn auch wenn man das teil dünner haben will. geht mit: List.setFixedCellWidth(int), ja darauf musste erstmal kommen.danke nochma, läuft jetz alles.

    pain



  • hi

    also ich verwende für so gut wie jede gui von mir das absolute layout. Es ist bei der Netbeans IDE dabei und ist klasse! Du kannst jedem button eine absolute Position und Größe angeben. Manbekommt hiermit echt die besten Ergebnisse. Der Nachteil ist. das das Fenster nicht skalierbar ist also feste grösse hat. Oftmals ist das aber ja gewünscht.



  • bei der liste setzt ich immer ALLE Spalten jeweils auf eine bestimmte:
    setPreferredSize ,setMinimumSize und setSize.

    dann gehts 🙂



  • verräts du mir noch den sysntax ? irgendwie läuft det nicht.
    ich setze die List mir den werten wie du gesagt hast. nix.
    sei so lieb und sag was du mit den spalten meinst, und vielleicht auch kurzen syntax.thx

    pain



  • *urgs* sorry hatte da gerade einen Gehirnpaul. Ich meinte eine Table und keine List. Aber das müsste ja trotzdem machbar sein. Wie klein willst du deine Liste den haben? hmm wie gesagt ich mache das immer mit absolute Layout, da kann man alle Grössen direkt in Pixeln angeben.



  • tschja, bei der liste funzt das nicht oder ich mach irgendwas falsch....

    pain


Anmelden zum Antworten