减少JFrame中的空白空间

时间:2014-08-05 21:04:27

标签: java swing

我已经在这里完成了一个应用程序,但是屏幕上有很多空白区域,我已经花了一段时间摆弄东西,但是下面的图片是我设法切割的最多。< / p>

enter image description here

我假设我没有使用某种方法或实用程序,我可能已经或可能根本没有使用过。

以下是代码:

public ListWindow() {

    chooser = new JFileChooser();

    this.setLayout(new GridLayout(3,1,1,1));
    JPanel sortPanel = new JPanel();
    JPanel displayPanel = new JPanel();
    JPanel btns = new JPanel();

    JLabel sortLabel = new JLabel("Sort by:");
    sortGame = new JRadioButton("Game");
    sortScore = new JRadioButton("Score");
    sortBtn = new JButton("Sort");

    ButtonGroup group = new ButtonGroup();
    group.add(sortGame);
    group.add(sortScore);

    list = new JList(reviewList.toArray());

    JScrollPane reviewPane = new JScrollPane(list);
    reviewPane.setPreferredSize(new Dimension(400, 150));

    windowBtn = new JButton("To Review Entry");

    buttonActions();

    sortPanel.add(sortLabel);
    sortPanel.add(sortGame);
    sortPanel.add(sortScore);
    sortPanel.add(sortBtn);
    displayPanel.add(reviewPane);
    btns.add(windowBtn);

    this.add(sortPanel);
    this.add(displayPanel);
    this.add(btns);
}
public static void main(String[] args) {

    ListWindow window = new ListWindow();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setTitle("CriticalStrike.com - Review Database");
    window.pack();
    window.setVisible(true);
}
}

感谢您的帮助,伙计们!

2 个答案:

答案 0 :(得分:3)

这是由使用GridLayout引起的,这会导致您添加到其中的组件使用相同大小的空格。在你的情况下有一列和三行,如果三个组件没有占用相同的空间,那么一些GridLayout区域将有未使用的额外空间。

我建议在这里使用BorderLayout。您可以将第一个和第三个组件添加到北部和南部位置,这将尝试使用最少的房间高度和明智的房间宽度,并且您可以将大文本区域添加到中心位置,这将尽量使用最大的房间高度和宽度。

这就像......

this.setLayout(new BorderLayout());
...
this.add(sortPanel, BorderLayout.NORTH);
this.add(displayPanel, BorderLayout.CENTER);
this.add(btns, BorderLayout.SOUTH);

答案 1 :(得分:0)

还有另一种可能性,使用GridBagLayout将所有组件向上推,将所有死区留在窗口底部。

您需要将此添加到主页。

getContentPane().setLayout(new GridBagLayout());

然后在ListWindow()

中需要这样的东西
GridBagConstraints gBC = new GridBagConstraints();
//these two lines so it will still resize horizontally
gBC.fill = GridBagConstraints.HORIZONTAL;  
gBC.weightx = 1.0;

然后,您将使用

添加面板
this.add(panel, gBC);

现在的诀窍是推动一切 - 你可以通过在面板下方放置一个空的JLabel来实现这一点,这些面板将垂直调整大小。像这样:

JLabel jLabel1 = new JLabel();
gBC.fill = GridBagConstraints.VERTICAL;
gBC.weightx = 0.0;
gBC.weighty = 1.0;
this.add(jLabel1, gBC);

您可能还需要在GridBagConstraints中设置每个组件的垂直位置,但我怀疑它是否按顺序添加它们。