tutorial tipos son manager los fillers español cuáles borderlayout java swing layout layout-manager gridbaglayout

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: