如何将按钮居中并使标题居中?

时间:2020-01-12 20:49:27

标签: java swing layout-manager

我试图将这两个开始后退按钮居中,但是任何时候我尝试诸如BoxLayout.SetLocation,{{ 1}},SwingConstant.CENTER.setVerticalAlignment无效。谁能帮我设置两个中间按钮以及“ Snake”标题位于框架顶部中心的位置?谢谢。

.setHorizonatalAlignment

3 个答案:

答案 0 :(得分:1)

快速浏览here。最适合您的应用的是BoxLayoutFlowLayout

对于它们各自的使用领域,两者都是非常非常强大的工具。

除此之外,还尝试看一下Java的布局教程。您应该始终在Frames上使用“ getContentPane()”方法,并在“ ContentPane”中应用布局并将组件添加到其中!

答案 1 :(得分:1)

请记住,您不会陷入单一布局。实际上,找到一种(复杂的)布局解决方案可以通过单一布局解决的情况非常罕见。

例如,使用多种/复合布局...

Example

这仅利用BorderLayout来管理标题和按钮面板,而使用GridBagLayout来管理按钮本身(默认情况下,它将使按钮在垂直和水平方向上居中)

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new BorderLayout());

            JLabel title = new JLabel("Snake");
            title.setHorizontalAlignment(JLabel.CENTER);
            add(title, BorderLayout.NORTH);

            JPanel buttonsPane = new JPanel(new GridBagLayout());
            buttonsPane.setBorder(new EmptyBorder(50, 50, 50, 50));

            buttonsPane.add(makeButton("Start"));
            buttonsPane.add(makeButton("Back"));

            add(buttonsPane);
        }

        protected JButton makeButton(String text) {
            JButton btn = new JButton(text);
            return btn;
        }


    }

}

答案 2 :(得分:0)

您可以按以下方式使用Everything within the curly braces ({...}) is processed by the formatter and replaced by its placeholder:

BorderLayout