GridBagLayout组件的位置不起作用

时间:2012-11-30 18:34:19

标签: java swing gridbaglayout

您好我是java的初学者,并使用GridBagLayout进行小型GUI。请参阅附加的代码以及输出。我想要的是按照gridx和gridy中指定的位置将JButtons放在左上角。但是如果我使用Insets,gridx / gridy所有工作但不是从正确的坐标,它将组件放置在中心而不是左上方,所以请查看附加的代码和图像并指导我它

public  rect()
{     

      JPanel panel = new JPanel( new GridBagLayout());
      GridBagConstraints gbc = new GridBagConstraints();
      JButton nb1= new JButton("Button1  ");
      JButton nb2= new JButton("Button2  ");

      gbc.gridx=0;
      gbc.gridy=0 ;
      panel.add(nb1, gbc);
      gbc.gridx=1;
      gbc.gridy=1; 
      panel.add(nb2, gbc);
      panel.setVisible(true);
      JFrame  frame = new JFrame("Address Book "); 
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      frame.setSize(300, 300 );
      frame.add(panel);

      frame.setVisible(true); 


}

输出:想要左上方的这些按钮,请指导我

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为问题更多是使用setSize(..),您应该在LayoutManager添加所有组件之后使用JFrame并在JFrame实例上调用pack()在设置JFrame可见之前,也不需要panel.setVisible(..)

enter image description here

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        @Override

        public void run() {
            JPanel panel = new JPanel(new GridBagLayout());

            JButton nb1 = new JButton("Button1  ");
            JButton nb2 = new JButton("Button2  ");

            GridBagConstraints gbc = new GridBagConstraints();

            gbc.gridx = 0;
            gbc.gridy = 0;
            panel.add(nb1, gbc);

            gbc.gridx = 1;
            gbc.gridy = 1;
            panel.add(nb2, gbc);

            JFrame frame = new JFrame("Address Book ");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            frame.add(panel);

            frame.pack();
            frame.setVisible(true);
        }
    });
}