为什么我的按钮在我的JFrame上没有正确定位没有布局?

时间:2016-09-05 08:15:47

标签: java swing layout-manager null-layout-manager

所以我有一个使用setLayout(null)的JFrame,所以我可以手工定位我的元素。

但是,当访问内容窗格并获取框架的大小时,它表示其高度为1.0。

有谁知道如何解决这个问题?

以下是代码:

import javax.swing.*;
import java.awt.*;

public class Launcher extends JFrame
{
    public Launcher(String title) {
        super(title);

        setLayout(null);
        pack();

        setSize(new Dimension(LauncherUtil.LAUNCHER_WIDTH, LauncherUtil.LAUNCHER_HEIGHT));
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        displayComponents();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Launcher launch = new Launcher(LauncherUtil.LAUNCHER_TITLE);
                launch.setVisible(true);
            }
        });
    }

    private void displayComponents() {
        Dimension size = getContentPane().getSize();
        JButton launchButton = new JButton("Launch Game");
        System.out.println(size.getHeight());
        launchButton.setBounds(0, (int)size.getHeight() - 60, (int)size.getWidth(), 60);
        add(launchButton);
    }
}

2 个答案:

答案 0 :(得分:0)

也许是如果您尝试通过使用Toolkit来获得屏幕尺寸,将可以按照您的意愿工作

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

它带给您运行Java程序的屏幕大小。希望对您有所帮助。

答案 1 :(得分:-1)

内容窗格为JPanel,其默认大小为1x1px。由于您未将任何组件放入内容窗格并且未为面板设置首选大小,因此内容窗格的大小仍为1x1px。

解决此问题的一种方法是按以下顺序调用这三种方法:

setLayout(null);
setPreferredSize(new Dimension(300, 400));
pack();

但是,您应该使用布局管理器而不是管理 手工制作组件的大小和位置。