JFrame在中心位置三个按钮一个在另一个下面

时间:2014-04-23 18:19:21

标签: java swing user-interface jbutton layout-manager

所以我希望三个JButtons全部相互叠加,但宽度或高度也不大。我对Java的布局并不太熟悉,说实话,我对它们并不太热衷。请查看下面的代码图片,向我解释如何,谢谢。

enter image description here

package com.aqagame.harrykitchener;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Main 
{

    private JButton playGame, playerNames, exitGame;

    public Main()
    {

        JPanel mainCard = new JPanel(new BorderLayout(8, 8));
        playGame = new JButton("Play Game");
        playerNames = new JButton("Player Names");
        exitGame = new JButton("Exit Game");


        mainCard.add(playGame, BorderLayout.NORTH);
        mainCard.add(playerNames, BorderLayout.CENTER);
        mainCard.add(exitGame, BorderLayout.SOUTH);

        JFrame window = new JFrame("Harry's AQA game");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(mainCard);
        window.setSize(900, 800);
        window.setLocationRelativeTo(null);
        window.setVisible(true);

    }

    public static void main(String args[])
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Main();
            }
        });
    }

}

3 个答案:

答案 0 :(得分:4)

查看不同布局管理器的Java Documentation。我知道你不熟悉它们,这就是你应该开始的原因。一旦你习惯了他们,他们的好处是无止境的。文档中有很多优秀的信息,我相信你会学到很多东西。就个人而言,我建议查看Box Layout

enter image description here

答案 1 :(得分:4)

  1. 创建使用GridLayout的JPanel并将所有按钮添加到面板。 GridLayout会自动调整按钮的大小。

  2. 将主窗口的layout manager设置为使用GridBagLayout

  3. 使用默认的GridBagConststraints将面板添加到主窗口。然后面板将自动水平和垂直居中。

答案 2 :(得分:1)

为了不使用Box或GridBag,我认为这样的组合可能有用:

  • 让主面板(让我们称之为A)具有BorderLayout
  • 使用FlowLayout创建另一个面板(让我们称之为B),构造函数将组件与中心对齐
  • 创建另一个面板(让我们称之为C),使用GridLayout,1列3行
  • 使用FlowLayout将每个按钮添加到新的JPanel(每个按钮1个JPanel,因此按钮由FlowLayout包装),然后将每个JPanel添加到C
  • 将C添加到B
  • 将B添加到A(中心位置)

我认为这应该会导致按钮在少量填充的情况下彼此叠加,而不会在横向拉伸并且出现在屏幕中央时。