首页 > 解决方案 > 居中 Java JPanel 元素

问题描述

好的,所以我四处寻找这个问题的答案,但我似乎找不到任何适用于我的代码的答案。这有点乱,因为它是我的第一个 Java 程序之一。JButton 和 Image 不想与中心对齐,我不确定我做错了什么。

这是我现在拥有的代码:

import java.awt.Color;
import java.awt.Component;

import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.plaf.DimensionUIResource;

public class lightswitch {
    public static void main(String[] args) {
        int scene = 0;
        Color cGray = new Color(50, 50, 50);
        JFrame window = new JFrame("LightSwitch");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setPreferredSize(new DimensionUIResource(1080, 720));

        SwingUtilities.invokeLater(new Runnable(){
           public void run() {
               switch (scene) {
                   case 0:
                        drawWindow(window, cGray, 1);
                        break;
                   default:
                        break;
               }
           } 
        });
    }

    public static void drawWindow(JFrame window, Color bgc, int title) {
        JPanel p = new JPanel();
        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
        p.setAlignmentX(Component.CENTER_ALIGNMENT);

        if (title == 1) {
            //create logo
            ImageIcon logoIcon = new ImageIcon("./paks/img/logo.png");
            p.add(new JLabel(logoIcon));

            //create play button
            JButton playButton = new JButton("Play");
            playButton.setPreferredSize(new DimensionUIResource(250, 50));
            playButton.setAlignmentX(Component.CENTER_ALIGNMENT);
            p.add(playButton);

            p.setBackground(bgc);
            window.getContentPane().add(p);
            window.pack();
            window.setVisible(true);
        } else {
            p.setBackground(bgc);
            window.pack();
            window.setVisible(true);
        }
    }
}

请尝试使您的答案对菜鸟友好

另外,我不确定这是否有任何区别,但我使用的是 VSCode 和 Java 16.0.1。

标签: javaswinglayout-manager

解决方案


推荐阅读