我是Java Swing的新手,我一直在努力从左上角开始GridBagLayout,这样c.gridx = 0 c.gridy = 0就会把我的对象放在左上角。
如果您能在此之后告诉我需要做什么,我将不胜感激:
JPanel panel = new JPanel(new GridBagLayout());
frame.add(panel);
GridBagConstraints c = new GridBagConstraints();
我知道我必须使用NORTHWEST或FIRST_LINE_START常量,但我不知道如何。我试图这样做'但它没有意识到常数。
frame.getContentPane().add(panel, BorderLayout.NORTHWEST);
感谢您的帮助。
答案 0 :(得分:15)
阅读How to Use GridBagLayout上的Swing教程中的部分。关于“weightx,weighty”的部分说明:
除非您为weightx或weighty指定至少一个非零值,否则所有组件都会在其容器的中心聚集在一起。
答案 1 :(得分:12)
您需要使用GridBagConstraints
'anchor
媒体资源。这应该适合你:
frame.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
frame.add(panel, gbc);
我不保证您不必设置约束对象的其他属性来获得所需的布局。特别是,您可能需要将widthx
和widthy
设置为1
,以便面板占用给定的所有可用空间。
答案 2 :(得分:5)
对于那些使用IDE(例如NetBeans)的人,我终于找到了一个很好的技巧:如果你想将组件添加到顶部并使用他们的首选大小:添加另一个空的面板,其中weighty = 1.0。从自动生成的代码(NetBeans)复制:
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.weighty = 1.0;
jPanelOptions.add(jPanelFiller, gridBagConstraints);
答案 3 :(得分:4)
快速简单的方法:
将空白JLabel添加到页面末尾:
// your code goes here
gbc.weightx = 1;
gbc.weighty = 1;
bg.add(new JLabel(" "), gbc); // blank JLabel
答案 4 :(得分:2)
有一种解决方法。您可以使用BorderLayout.NORTH将GridBagLayout面板放在BorderLayout面板中。然后GridBagLayout面板中的Component将从顶部位置开始。
static void test4(){
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(480, 360);
JPanel borderLayoutPanel=new JPanel(new BorderLayout());
JPanel gridBagLayoutPanel = new JPanel(new GridBagLayout());
borderLayoutPanel.add(gridBagLayoutPanel, BorderLayout.NORTH);
frame.add(borderLayoutPanel);
JButton testButton=new JButton("test button");
GridBagConstraints c = new GridBagConstraints();
c.gridx=0;
c.gridy=0;
gridBagLayoutPanel.add(testButton, c);
frame.setVisible(true);
}
答案 5 :(得分:0)
如果您希望网格一直到顶部,只需将所有weighty = 0设置为最后一项,将其设置为大于0的任何数字,它将有效地将其余按钮推到顶部
不要忘记增加按钮的网格值。
否则它将居中。 (如果你不使用c.fill = GridBagConstraints.HORIZONTAL属性,可以使用gridx和weightx值完成相同的操作。)