Frage

Ich versuche, eine Sidebar für ein Projekt zu machen, dass ich arbeite. Ich entschied mich für GridBagLayout zu verwenden, weil ich mit den Einschränkungen von BoxLayout frustriert wurde. Könnte jemand helfen erklären, was ich falsch mache. Was ich will, ist für die Seitenleiste zwei JPanels enthalten. Der Code, dass ich Orte sie auf halbem Weg nach unten in der Seitenleiste statt an der Spitze. Könnte jemand erklären, was ich hier fehlt.

    JPanel sideBar = new JPanel();
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
    sideBar.setLayout(new GridBagLayout());


    JPanel optionBar = new JPanel();
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
    optionBar.setLayout(new GridBagLayout());


    JPanel buttonBar = new JPanel();
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
    buttonBar.setLayout(new GridBagLayout());


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.ipady = 5;
    c.insets = new Insets(10,0,0,0);


    JButton simplify;
    simplify = new JButton("Open");
    simplify.addActionListener( this.listener );
    c.gridy = 0;
    buttonBar.add(simplify, c);

    JButton mergeButton;
    mergeButton = new JButton("Close");
    mergeButton.addActionListener( this.listener );
    c.gridy = 1;
    buttonBar.add(mergeButton, c);

    JButton splitButton;
    splitButton = new JButton("Merge");
    splitButton.addActionListener( this.listener );
    c.gridy = 2;
    buttonBar.add(splitButton, c);

    c.insets = new Insets(0,5,5,5);
    c.gridy = 0;
    sideBar.add(optionBar, c);

    c.gridy = 1;
    c.ipadx = 70;
    sideBar.add(buttonBar, c);

    return(sideBar);
War es hilfreich?

Lösung

GridBagLayout wird nur genug vertikalen Raum zuweisen, dass eine Komponente benötigt, den Rest leer lassen. Ich erwarte, dass Sie sehen Ihre Seite Bar Komponenten vertikal zentriert?

Um „Push“ die Komponenten aus, benötigen Sie eine vertikale Gewicht einzustellen. Wenn Sie die weighty Einschränkung 1.0 auf Ihrem letzten Komponente setzen, nehmen sie alle verbleibenden vertikalen Raum für diese Komponente und drücken Sie den Rest an die Spitze. (Sie können auch Anker müssen, dass im letzten Panel GridBagConstraints.NORTH).

Versuchen c.weighty = 1.0 vor sideBar.add(buttonBar, c);

Andere Tipps

Wenn Sie mit HTML vertraut / bequemer sind, könnten Sie table2gridbag . Es ist ein kleines Konsole-Tool, das eine Layout-Beschreibung (HTML-Tabelle) und übersetzt nimmt, dass in eine äquivalente Layout-Beschreibung für die GridBagLayout Manager Konfiguration

  

Der Code, dass ich Orte sie   halber Höhe der Seitenleiste statt nach unten zumin   die Spitze.

Nun müssen Sie durch das Lesen der Swing-Tutorial lernen, wie der Layout-Manager ordnungsgemäß verwenden. BoxLayout ist viel einfacher als GridBagLayout, weil Sie müssen nicht lernen, wie man Einschränkungen angeben. Aber wenn Sie wollen GridBagLayout verwenden, dann lesen Sie den Abschnitt „How to use GridBagLayout“. Sie können auf dem Abschnitt Umgang mit dem „weightx und gewichtig“ Zwängen konzentrieren wollen. Basierend auf meinem begrenzten Wissen, das sollte helfen, das Problem zu lösen.

Auch wenn Layout-Manager verwenden Sie verwenden setBounds nicht () oder setSize ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top