Una barra lateral java con GridBagLayout
-
19-09-2019 - |
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);
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 ().