java swing GridBagLayout左空间
我被java GridBagLayout困住了。这里只剩下一个问题。我希望中间面板(“测试标签2”)保留所有垂直空间 如何做到这一点 谢谢java swing GridBagLayout左空间,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,我被java GridBagLayout困住了。这里只剩下一个问题。我希望中间面板(“测试标签2”)保留所有垂直空间 如何做到这一点 谢谢 package com; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing
package com;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
public class Test1 {
private void _panel1(JPanel panel){
panel.setBorder(new LineBorder(Color.RED));
panel.setLayout(new GridBagLayout());
JPanel panel1 = new JPanel();
panel1.add(new JLabel(" Testing Label 1 "));
panel1.setBorder(new TitledBorder("P1"));
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.weighty = 0.0;
panel.add(panel1, c);
JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 1;
c.weightx = 1.0;
c.weighty = 1.0;
panel.add(panel2, c);
JPanel panel3 = new JPanel();
panel3.setBorder(new TitledBorder("P3"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 2;
c.weightx = 1.0;
c.weighty = 0.0;
panel3.setLayout(new GridLayout(5,1));
for(int i=0; i<5; i++){
panel3.add(new JButton("button "+i));
}
panel.add(panel3, c);
}
public Test1(){
JFrame frame = new JFrame();
frame.setTitle("test 1");
frame.getContentPane().setLayout(new GridLayout(1,3));
JPanel panel1 = new JPanel();
_panel1(panel1);
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
frame.getContentPane().add(panel1);
frame.getContentPane().add(panel2);
frame.getContentPane().add(panel3);
frame.setSize(800, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
Test1 t = new Test1();
}
}
package-com;
导入java.awt.Color;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.GridLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.border.LineBorder;
导入javax.swing.border.TitledBorder;
公共类Test1{
私人无效小组1(JPanel小组){
面板.设置顺序(新线条边框(颜色.红色));
panel.setLayout(新的GridBagLayout());
JPanel panel1=新的JPanel();
面板1.添加(新JLabel(“测试标签1”);
第1组:新的标题边界(“P1”);
GridBagConstraints c=新的GridBagConstraints();
c、 填充=GridBagConstraints.HORIZONTAL;
c、 锚点=GridBagConstraints.NORTH;
c、 gridx=0;
c、 gridy=0;
c、 权重x=1.0;
c、 权重y=0.0;
小组。添加(小组1,c);
JPanel panel2=新的JPanel();
面板2.添加(新JLabel(“测试标签2”));
第2组:新的标题边界(“P2”);
c=新的GridBagConstraints();
c、 填充=GridBagConstraints.HORIZONTAL;
c、 锚点=GridBagConstraints.NORTH;
c、 gridx=0;
c、 gridy=1;
c、 权重x=1.0;
c、 权重y=1.0;
小组。添加(小组2,c);
JPanel panel3=新的JPanel();
专题小组3.新标题(新标题边界(“P3”);
c=新的GridBagConstraints();
c、 填充=GridBagConstraints.HORIZONTAL;
c、 锚点=GridBagConstraints.NORTH;
c、 gridx=0;
c、 gridy=2;
c、 权重x=1.0;
c、 权重y=0.0;
面板3.设置布局(新网格布局(5,1));
对于(int i=0;i请考虑将panel2的GridBagConstraint的填充字段更改为两者:
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH; // *****
c.anchor = GridBagConstraints.NORTH;
无论是这样还是更简单的解决方案,只需使用BorderLayout即可:
panel.setBorder(new LineBorder(Color.RED));
panel.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
panel1.add(new JLabel(" Testing Label 1 "));
panel1.setBorder(new TitledBorder("P1"));
panel.add(panel1, BorderLayout.NORTH);
JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
panel.add(panel2, BorderLayout.CENTER);
JPanel panel3 = new JPanel();
panel3.setBorder(new TitledBorder("P3"));
panel3.setLayout(new GridLayout(5, 1));
for (int i = 0; i < 5; i++) {
panel3.add(new JButton("button " + i));
}
panel.add(panel3, BorderLayout.SOUTH);
panel.setboorder(新的线条边框(颜色为红色));
panel.setLayout(新的BorderLayout());
JPanel panel1=新的JPanel();
面板1.添加(新JLabel(“测试标签1”);
第1组:新的标题边界(“P1”);
面板。添加(面板1,边界布局。北);
JPanel panel2=新的JPanel();
面板2.添加(新JLabel(“测试标签2”));
第2组:新的标题边界(“P2”);
panel.add(panel2,BorderLayout.CENTER);
JPanel panel3=新的JPanel();
专题小组3.新标题(新标题边界(“P3”);
面板3.设置布局(新网格布局(5,1));
对于(int i=0;i<5;i++){
面板3.添加(新的JButton(“按钮”+i));
}
面板。添加(面板3,边界布局。南部);
我刚换了一行(27):
您正在将panel2
的网格约束设置为HORIZONTAL
关于,如果需要额外的垂直填充空间/两种填充空间,如果组件必须占用所有空间,请查看插图space@bestsss:我不认为这是正确的。Insets不会使组件填充空间,而是在组件周围放置一个空边框,边框的大小由传入Insets构造函数的参数决定。更好更改GridBagConstraint的填充字段。请参阅我的帖子中的示例。@Hovercraft满是鳗鱼,Of=after,sry@bestsss:请澄清您的最新评论。@气垫船上满是鳗鱼,第一条评论如下:如果您需要额外空间,请查看插图*after*fill VERTICAL/BOTH
final JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
// You have to use BOTH for the panel to take
// all vertical and horizontal space
c.fill = GridBagConstraints.BOTH;