从Java Swing的左上角开始GridBagLayout

我是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); 

谢谢你的帮助。

您需要使用GridBagConstraintsanchor属性。 这应该为你做:

 frame.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.NORTHWEST; frame.add(panel, gbc); 

我不保证你不必设置约束对象的其他属性来获得你想要的布局。 特别是,您可能需要将widthxwidthy设置为1以便面板占用给定的所有可用空间。

阅读Swing教程中有关如何使用GridBagLayout的部分 。 关于“weightx,weighty”的部分说明:

除非您为weightx或weighty指定至少一个非零值,否则所有组件在其容器的中心聚集在一起。

对于那些使用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); 

一种快速而简单的方法:

将空白JLabel添加到页面末尾:

  // your code goes here gbc.weightx = 1; gbc.weighty = 1; bg.add(new JLabel(" "), gbc); // blank JLabel 

如果你想让网格一直到顶部,只需将你的所有weighty = 0设置为最后一项,将其设置为大于0的任何数字,它将有效地将其余按钮推到顶部。

不要忘记增加按钮的网格值。

否则它将居中。 (如果您不使用c.fill = GridBagConstraints.HORIZONTAL属性,则可以使用gridx和weightx值完成相同的操作。)

有一个解决方法。 您可以使用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); } 

在此处输入图像描述