Domanda

sto cercando di disegnare una barra laterale per un progetto che sto lavorando. Ho scelto di utilizzare GridBagLayout perché sono diventato frustrato con le limitazioni di BoxLayout. Qualcuno potrebbe aiutare a spiegare quello che sto facendo male. Quello che voglio è per la barra laterale per contenere due JPanels. Il codice che ho posti li a metà della barra laterale invece che in alto. qualcuno potrebbe spiegare che cosa mi manca qui.

    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);
È stato utile?

Soluzione

GridBagLayout allocherà solo spazio verticale sufficiente che un componente richiede, lasciando il vuoto resto. Mi aspetto che si sta vedendo i componenti barra laterale centrato in verticale?

Al fine di "spingere" i componenti fuori, è necessario impostare un peso verticale. Se si imposta il vincolo weighty a 1.0 sul vostro ultimo componente, ci vorrà tutto lo spazio verticale rimanente per quel componente e spingere il resto verso l'alto. (Potrebbe anche essere necessario per ancorare che ultimo pannello a GridBagConstraints.NORTH).

Prova c.weighty = 1.0 prima sideBar.add(buttonBar, c);

Altri suggerimenti

Se sei a conoscenza / più a suo agio con il linguaggio HTML, è possibile utilizzare table2gridbag . Si tratta di un piccolo strumento di console che prende una descrizione del layout (tabella HTML) e traduce che in una descrizione del layout equivalente per configurare il manager GridBagLayout

  

Il codice che ho li pone   a metà della barra laterale invece che a   la parte superiore.

Bene è necessario iniziare con la lettura delle dell'oscillazione esercitazione per imparare come utilizzare i gestori di layout in modo corretto. BoxLayout è molto più facile di quanto GridBagLayout perché non c'è bisogno di imparare come specificare vincoli. Ma se si desidera utilizzare GridBagLayout, allora continuate a leggere la sezione "Come usare GridBagLayout". Si consiglia di concentrarsi sulla sezione relativa alla "weightx e pesanti" vincoli. Sulla base della mia limitata conoscenza che dovrebbe aiutare a risolvere il problema.

Inoltre, quando si utilizzano gestori di layout non si utilizza setBounds () o setSize ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top