java - tipos - GridBagLayout no funciona
swing fillers java (1)
this.rootComponent.setLayout(new GridBagLayout());
GridBagConstraints gbc=new GridBagConstraints();
//gbc.gridwidth=2;
gbc.gridx=0;
gbc.gridy=0;
gbc.gridwidth=8;
gbc.anchor=GridBagConstraints.FIRST_LINE_START;
this.rootComponent.add(new JLabel("Test label 1"),gbc);
gbc.gridx=8;
gbc.gridy=12;
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbc.anchor=GridBagConstraints.FIRST_LINE_START;
this.rootComponent.add(new JLabel("Test label"),gbc);
Quiere formatearlo así la parte gris muestra la parte jpanel. Inicialmente quiero diseñar los primeros 2 jpanel correctamente. que no está funcionando. ¿Como arreglarlo?
No está weightx
ningún valor weightx
y weightx
en GridBagConstraints
. Además, sus valores de gridwidth
son incorrectos, ya que solo necesita ser 2
para el JPanel
inferior, para el resto debe ser 1
.
Explicación de lo que estoy haciendo: Considere JPanel
s BLUE
y RED
, se colocarán a lo largo del X-AXIS , en una relación de 70:30
, con respecto a la otra (por lo tanto, su weightx
será 0.7
y 0.3
respectivamente. el área total a lo largo del X-AXIS es 1.0
).
Ahora ambos de estos RED JPanel
BLUE
y RED JPanel
se colocarán a lo largo del Y-AXIS , con respecto al tercer GREEN JPanel
en la relación 90:10
, por lo tanto, ambos BLUE
y RED
tendrán weighty = 0.9
, y el GREEN JPanel
tendrá un weighty = 0.1
, pero dado que se supone que GREEN JPanel
ocupa toda el área (con respecto a X-AXIS ), ocupada por BLUE
y RED JPanel
s, para el caso, su gridwidth = 2
y weightx = 1.0
.
Pruebe este ejemplo de código:
import java.awt.*;
import javax.swing.*;
public class GridBagLayoutExample
{
private GridBagConstraints gbc;
public GridBagLayoutExample()
{
gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
}
private void displayGUI()
{
JFrame frame = new JFrame("GridBagLayout Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = getPanel(Color.WHITE);
contentPane.setLayout(new GridBagLayout());
JPanel leftPanel = getPanel(Color.BLUE);
JPanel rightPanel = getPanel(Color.RED);
JPanel bottomPanel = getPanel(Color.GREEN.darker());
addComp(contentPane, leftPanel
, 0, 0, 0.7, 0.9, 1, 1, GridBagConstraints.BOTH);
addComp(contentPane, rightPanel
, 1, 0, 0.3, 0.9, 1, 1, GridBagConstraints.BOTH);
addComp(contentPane, bottomPanel
, 0, 1, 1.0, 0.1, 2, 1, GridBagConstraints.BOTH);
frame.setContentPane(contentPane);
//frame.pack();
frame.setSize(300, 300);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private void addComp(JPanel panel, JComponent comp
, int gridX, int gridY
, double weightX, double weightY
, int gridWidth, int gridHeight, int fill)
{
gbc.gridx = gridX;
gbc.gridy = gridY;
gbc.weightx = weightX;
gbc.weighty = weightY;
gbc.gridwidth = gridWidth;
gbc.gridheight = gridHeight;
gbc.fill = fill;
panel.add(comp, gbc);
}
private JPanel getPanel(Color backColour)
{
JPanel panel = new JPanel();
panel.setOpaque(true);
panel.setBackground(backColour);
panel.setBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5));
return panel;
}
public static void main(String[] args)
{
Runnable runnable = new Runnable()
{
@Override
public void run()
{
new GridBagLayoutExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
Aquí está la SALIDA de lo mismo: