gridheight不会影响我的按钮

时间:2015-01-29 19:00:40

标签: java swing jframe jpanel

我是java应用程序的新手,我正在尝试在窗口底部连续创建一个带有3个按钮的窗口,扩展大小。但是网格高度对我的按钮没有任何影响。 gridwidth运行正常。

你能就我做错了什么给我反馈吗?我想我没有正确理解。

Bellow是我的代码和输出窗口。

提前Thanx!

private JButton button1;
private JButton button2;
private JButton button3;

public SessionTasksPage() 
{
     JPanel p1=new JPanel(new GridBagLayout());
     JPanel p2=new JPanel();

     button1 = new JButton("b1");    
     button2 = new JButton("b2"); 
     button3 = new JButton("b3");

     GridBagConstraints gbc =new GridBagConstraints();

     //gbc.insets = new Insets(1,1,1,1);

     gbc.gridheight = 5;
     gbc.gridwidth = 5;
     gbc.weightx=15;
     gbc.weighty=15;
     gbc.fill = GridBagConstraints.BOTH;

     p1.add(button2,gbc);
     p1.add(button3,gbc);
     p1.add(button1,gbc);

     add(p1,BorderLayout.SOUTH);
     add(p2,BorderLayout.NORTH);

     EventHandler1 event1 = new EventHandler1();
     button1.addActionListener(event1);

     //window terminate setting 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     //window size
     setSize(600,400);
     //pack();
     //make window visible
     setVisible(true);
     //window title
     setTitle("HCI-Projet");
     //voice command
     //new AePlayerWave("bin/sounds/login.wav").start();
}

public class EventHandler1 implements ActionListener
{
    public void actionPerformed(ActionEvent event1) {
        System.exit(0);
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

问题在于主面板的布局。您在该面板上使用的BorderLayout有一个较大的中心区域(BorderLayout.CENTER)和许多较小的区域(例如NORTHSOUTH)。布局将强制放置CENTER以外的任何位置的任何内容占用尽可能少的空间,并使用CENTER区域中的内容(在这种情况下没有任何内容)最大化剩余空间。由于您将p1添加为SOUTH,因此它会使p1的垂直分量保持尽可能小。如果您将p1添加为CENTER,则应解决您的问题。

作为旁注,如果网格中的所有行/列都具有相同的高度/宽度,您可能会发现使用GridLayoutGridBagLayout更容易。

答案 1 :(得分:0)

问题是JPanel p1。面板的空间由标准布局创建,如果您只使用add(p1,BorderLayout.SOUTH);,它将不会更改。

要使其可见,您可以使用边框: p1.setBorder(BorderFactory.createLineBorder(Color.black));

使用其他布局或GUI构建器。