【发布时间】:2014-09-03 15:06:38
【问题描述】:
我有一个JFrame,它的根JPanel 用GridBagLayout 实例化。在运行时,面板会根据一些描述填充组件,并在描述中给出宽度、高度和 x,y 坐标,以便与 gridwidth、gridheight、gridx 和 gridy 字段一起使用在GridBagConstraints。组件本身也可以是JPanels 和它们自己的子组件和GridBagConstraints,GUI 是在树中描述的,因此 Frame 被递归填充。
我遇到的问题是,当调整框架大小时,内部组件不会被拉伸以填充它们给定的宽度和高度。我在下面给出了一个布局代码示例,带有屏幕截图。
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.util.*;
public class GridBagTest extends JPanel {
private final GridBagConstraints gbc = new GridBagConstraints();
public GridBagTest(){
setLayout(new GridBagLayout());
add(gbcComponent(0,0,1,2), gbc);
add(gbcComponent(1,0,2,1), gbc);
add(gbcComponent(1,1,1,1), gbc);
add(gbcComponent(2,1,1,1), gbc);
}
//Returns a JPanel with some component inside it, and sets the GBC fields
private JPanel gbcComponent(int x, int y, int w, int h){
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gbc.fill = GridBagConstraints.BOTH;
JPanel panel = new JPanel();
JTextField text = new JTextField("(" + w + ", " + h + ")");
panel.setBorder(new TitledBorder("(" + x + ", " + y + ")"));
panel.add(text);
return panel;
}
public static void main (String args[]){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GridBagTest());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
我需要它,所以在图 2 中,容纳组件的内部 JPanels 被调整大小以填充 GridBagLayout 上各自的宽度和高度,理想情况下也拉伸它们的组件。
【问题讨论】:
标签: java swing resize layout-manager gridbaglayout