Java GridBaglyout fill不会调整容器内组件的大小
我有一个包含两个面板的Java GridBaglyout fill不会调整容器内组件的大小,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我有一个包含两个面板的JFrame 第一个面板(jpanel1)有一条欢迎消息 第二个面板(jpanel2)有一个JTable,包含在JScrollPane中 每当调整JFrame的大小时,我希望JTable使用额外的空间 我使用了GridBagLayout来实现这一点 c.gridx=0,c.gridy=0对于jpanel1 jpanel2的c.gridx=0,c.gridy=1,c.fill=2 我看到当帧大小增加时,jpanel2会增加 每当jpanel2大小增加时,需要做些什么来增加滚动
JFrame
第一个面板(jpanel1
)有一条欢迎消息
第二个面板(jpanel2
)有一个JTable
,包含在JScrollPane
中
每当调整JFrame
的大小时,我希望JTable
使用额外的空间
我使用了GridBagLayout
来实现这一点
c.gridx=0
,c.gridy=0
对于jpanel1
jpanel2的c.gridx=0
,c.gridy=1
,c.fill=2
我看到当帧大小增加时,jpanel2
会增加
每当jpanel2
大小增加时,需要做些什么来增加滚动窗格和表的大小。您的布局管理器出现问题
按照MadProgrammer的建议,对jpanel2
使用BorderLayout
,以调整JScrollPane
内部jpanel2
的大小
使用c.fill=BOTH
时,需要使用c.weightx=1;c、 权重=1
指定组件需要占用多少额外空间。阅读
下面是一个例子:
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TestFrame extends JFrame {
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
JPanel p1 = new JPanel();
p1.setBorder(BorderFactory.createTitledBorder("P1"));
p1.add(new JLabel("test"));
JPanel p2 = new JPanel(new BorderLayout());
p2.setBorder(BorderFactory.createTitledBorder("P2"));
p2.add(new JScrollPane(new JTable(2,2)));
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx=0;
c.gridy=0;
add(p1,c);
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
c.gridx=0;
c.gridy=1;
add(p2,c);
}
public static void main(String args[]) {
new TestFrame();
}
}
考虑提供一个说明你的问题的方法。这将减少混乱和更好的响应将jpanel2的布局管理器更改为使用BorderLayout
。。。