Pregunta

Estoy tratando de dibujar una barra lateral para un proyecto que estoy trabajando. Opté por usar GridBagLayout porque me hice frustrado con las limitaciones de BoxLayout. Podría alguien ayudar a explicar lo que estoy haciendo mal. Lo que yo quiero es que la barra lateral para contener dos JPanels. El código que tengo lugares a la mitad de la barra lateral en lugar de en la parte superior. ¿Podría alguien explicar lo que me falta aquí.

    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);
¿Fue útil?

Solución

GridBagLayout sólo asignar suficiente espacio vertical que requiere un componente, dejando el resto en blanco. Espero que se está viendo sus componentes de la barra lateral centrados verticalmente?

Con el fin de "empujar" los componentes a cabo, es necesario establecer un peso vertical. Si se establece la restricción weighty a 1,0 en el último componente, que ocupará todo el espacio vertical que queda de ese componente y empuje el resto a la parte superior. (También puede ser necesario para anclar ese último panel para GridBagConstraints.NORTH).

Trate c.weighty = 1.0 antes sideBar.add(buttonBar, c);

Otros consejos

Si está familiarizado / más cómodo con HTML, puede utilizar table2gridbag . Es una pequeña herramienta de consola que lleva una descripción del diseño (tabla HTML) y se traduce esto en una descripción del diseño equivalentes para configurar el gestor de GridBagLayout

  

El código que tengo los coloca   hasta la mitad de la barra lateral en lugar de por lo   la parte superior.

Bien lo necesario para empezar leyendo la tutorial oscilación para aprender a utilizar los controladores de distribución correctamente. BoxLayout es mucho más fácil que GridBagLayout, ya que no tiene que aprender cómo especificar limitaciones. Pero si desea usar GridBagLayout, a continuación, lea la sección "Cómo usar GridBagLayout". Es posible que desee para concentrarse en la sección relativa a las restricciones "pesadas" y weightx. Basado en mi conocimiento limitado que debe ayudar a resolver el problema.

Además, al utilizar controladores de distribución no utiliza setBounds () o setSize ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top