JPanels无法设置任何大小的值

时间:2017-11-20 18:40:17

标签: java swing jframe jpanel

我正在尝试构建一个简单的布局,其中包含:

** first row is consisted of : 3 JComboboxes.
** second row of one JTextArea
** third row of 3 buttons.

但是,我得到了这种奇怪的布局:

enter image description here

如何让一切看起来没有所有这些隐藏的空白,并为组件设置合理的高度(由于某种原因,它似乎占据了整个框架)?

我的代码:

 mainFrame.setSize(500,600);
    mainFrame.setLayout(new GridLayout(0,1,0,0));
    mainFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent windowEvent){
                System.exit(0);
            }
        });
    JPanel datePanel = new JPanel(new GridLayout(1,3,0,0));
    String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
    JComboBox petList = new JComboBox( petStrings );
    JComboBox petList2 = new JComboBox( petStrings );
    JComboBox petList3 = new JComboBox( petStrings );
    datePanel.add( petList );
    datePanel.add( petList2 );
    datePanel.add( petList3 );
    mainFrame.add( datePanel );

    JPanel controlPanel = new JPanel();
    controlPanel.setLayout(new FlowLayout());
    final JTextArea commentTextArea = new JTextArea("",7,25);
    JScrollPane scrollPane = new JScrollPane(commentTextArea);
    controlPanel.add(scrollPane);
    mainFrame.add(controlPanel);

    JPanel buttonsPanel = new JPanel( new GridLayout(0,1,10,10) );
    buttonsPanel.add( new JButton("x") );
    buttonsPanel.add( new JButton("y") );
    buttonsPanel.add( new JButton("z") );

    mainFrame.add( buttonsPanel );

1 个答案:

答案 0 :(得分:1)

  

但是,我得到了这种奇怪的布局:

您正在使用GridLayout,这就是GridLayout的功能。它使网格中的每个单元格大小相同。

您需要使用其他布局管理器或布局管理器组合。

这个框架的默认BorderLayout可能适合你:

  1. 您创建一个使用FlowLayout的JPanel,然后将组合框添加到面板。然后使用BorderLayout.PAGE_START作为约束
  2. 将面板添加到框架
  3. 然后将文本区域添加到BorderLayout.CENTER
  4. 然后为按钮创建一个面板,并将它们添加到BorderLayout.PAGE_END。
  5. 或者,如果您不想嵌套布局,那么您可以使用GridBagLayout。

    我们无法为您提供准确的解决方案,因此您需要与不同的布局管理器一起玩。阅读布局管理器上的Swing教程,了解更多信息和工作示例,以帮助您入门。