java在调整JFrame的大小时消除了组件之间的额外空间
我正在使用GridBagLayout在一个框架中排列一些组件。
第一次创建框架时,组件之间有一个合适的空间
我试着按照一些用户的建议调整权重和插入,但似乎无法解决问题
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JTextArea;
public class Frame1 extends JFrame {
JLabel one = new JLabel("one");
JLabel two = new JLabel("two");
JLabel three = new JLabel("three");
JTextField oneF = new JTextField(20);
JTextField twoF = new JTextField(20);
JTextField threeF = new JTextField(20);
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("menu");
GridBagConstraints c = new GridBagConstraints();
public Frame1() {
setTitle("GridBagLayout Test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new GridBagLayout());
menuBar.add(menu);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = c.REMAINDER;
c.fill = c.HORIZONTAL;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(menuBar, c);
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.fill = c.NONE;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(one, c);
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 1;
c.fill = c.NONE;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(oneF, c);
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 1;
c.fill = c.NONE;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(two, c);
c.gridx = 1;
c.gridy = 2;
c.gridwidth = 1;
c.fill = c.NONE;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(twoF, c);
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
c.fill = c.NONE;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(three, c);
c.gridx = 1;
c.gridy = 3;
c.gridwidth = 1;
c.fill = c.NONE;
c.gridheight = 1;
c.weightx = 1;
c.weighty = 1;
c.anchor = c.NORTH;
c.insets = new Insets(5,5,5,5);
add(threeF, c);
//setResizable(false);
pack();
setVisible(true);
}
}
ps:-我是GUI编程新手,所以请原谅我的任何noob错误
编辑1:这是我完成后想要的。我知道目前它看起来并不接近我的想法。。。我仍在努力
谢谢
# 1 楼答案
我不知道它应该是什么样子,但是您可以尝试为文本字段设置标签
c.anchor=GridBagConstraints.EAST
和c.anchor=GridBagConstraints.WEST
还可以尝试设置
c.fill = GridBadConstraints.BOTH
# 2 楼答案
这样做的目的是添加空行/列,以填充可用空间:
编辑:响应您的编辑:使用“封面艺术”的附加“成长”栏
# 3 楼答案
问题是
c.weightx
和c.weighty
的赋值。weightx和weighty确定当容器变得比容纳组件的首选尺寸所需的大时,如何将额外空间分配给GridBagLayout中的网格单元对于所有单元格,权重x和权重y应为零,但当窗口变大时希望变大的单元格除外
# 4 楼答案
使用嵌套布局(几个
LayoutManager
的组合),您的图片告诉我,仍然可以对放置在左侧的组件使用
GridBagLayout
,在我的代码中(尽可能最简单的想法)
JComponent
放在左侧的无法调整大小,因为它们受到LayoutManager默认值的限制,更多信息请参见Oracle tutorial由SSCCE/MCVE涂漆