Я хочу вложить JPanels в JPanels в GridBagLayout.Вот изображение проблемы, с которой я столкнулся:
Как вы можете сказать, вложение компонентов внутри JPanel, расположенного внутри GridBagLayout, приводит к увеличению размера JPanel.Это проблема, поскольку я не могу добавить компоненты в JPanels без изменения их размера.
Вот код:
package gui;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GridBagDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Grid grid = new Grid();
JFrame frame = new JFrame();
frame.setBounds(100,100, 500, 500);
frame.add(grid);
frame.setVisible(true);
}
}
class Grid extends JPanel {
public Grid () {
setBackground(Color.white);
GridBagLayout bagLayout = new GridBagLayout();
setLayout(bagLayout);
GridBagConstraints gc = new GridBagConstraints();
JPanel navBar = new JPanel();
navBar.setBackground(Color.GREEN);
JLabel label = new JLabel("hello world");
navBar.add(label);
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 2;
gc.weightx = 0.1;
gc.weighty = 0.05;
add(navBar, gc);
JPanel toolBar = new JPanel();
toolBar.setBackground(Color.blue);
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 0;
gc.gridy = 1;
gc.gridwidth = 1;
gc.weightx = 0.3;
gc.weighty = 0.3;
add(toolBar, gc);
//Second row
JPanel content = new JPanel();
content.setBackground(Color.CYAN);
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 0;
gc.gridy = 1;
gc.weightx = 0.15;
gc.weighty = 0.3;
add(content, gc);
JPanel navBarChild = new JPanel();
navBarChild.setBackground(Color.MAGENTA);
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 1;
gc.gridy = 1;
gc.weightx = 0.3;
gc.weighty = 0.3;
add(navBarChild, gc);
//Third row
JPanel bottomLeft = new JPanel();
bottomLeft.setBackground(Color.DARK_GRAY);
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 0;
gc.gridy = 2;
gc.weightx = 0.1;
gc.weighty = 0.3;
add(bottomLeft, gc);
JPanel bottomRight = new JPanel();
bottomRight.setBackground(Color.LIGHT_GRAY);
gc.fill = GridBagConstraints.BOTH;
gc.gridx = 1;
gc.gridy = 2;
gc.weightx = 0.3;
gc.weighty = 0.3;
add(bottomRight, gc);
}
}
Мое предпочтительное поведение - возможность добавлять компоненты во вложенные файлы.JPanel без увеличения размера JPanel.
Я некоторое время изучал эту тему в Google, и большинство результатов не имеют отношения к моей проблеме.Есть два SO ответа, которые в некоторой степени связаны, но на самом деле не касаются одной и той же проблемы.