调整JFrame的大小以适合调整后的JPanel

yoavp13

我对JPanel和JFrame很陌生,可能无法按我应该的方式使用它们。我正在尝试创建Pong游戏,并在创建JFrame并将其添加到JPanel之后,我能够调整JPanel的大小,但是我不知道如何调整JFrame的大小以适合它。游戏类扩展了JPanel。

主要的:

    public static void main(String[] args) throws InterruptedException {
        int height = 500, width =(int) (height*1.56); //height = 500, width = 780;
        JFrame frame = new JFrame("Pong");
        Game game = new Game();
        frame.add(game);
        frame.setVisible(true);
        game.setSize(width, height);
        System.out.println(game.getHeight());
        System.out.println(game.getWidth());
        game.setBackground(Color.BLACK);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        System.out.println(frame.getHeight());
        System.out.println(frame.getWidth());
    }

输出:

500
780
39
136

输出应该是这样的:

500
780
*above* 500
*above* 780

编辑:

    public static void main(String[] args) throws InterruptedException {
        int height = 500, width =(int) (height*1.56); //height = 500, width = 780;
        JFrame frame = new JFrame("Pong");
        Game game = new Game();
        frame.add(game);
        frame.setVisible(true);
        game.setPreferredSize(new Dimension(width, height));
        frame.pack();
        System.out.println(game.getHeight());
        System.out.println(game.getWidth());
        game.setBackground(Color.BLACK);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        System.out.println(frame.getHeight());
        System.out.println(frame.getWidth());
    }

将setSize更改为setPreferredSize,然后为JFrame调用pack()修复了所有问题。

充满鳗鱼的气垫船

同样,处理首选大小,并确保添加组件调用pack()JFrame 另外,最好重写getPreferredSize而不是调用例如:setPreferredSize

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

public class Game extends JPanel {
    private static final int PREF_W = 400;
    private static final int PREF_H = 300;
    private int prefW;
    private int prefH;

    public Game(int prefW, int prefH) {
        this.prefW = prefW;
        this.prefH = prefH;
    }

    public Game() {
        this(PREF_W, PREF_H);
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(prefW, prefH);
    }

    private static void createAndShowGui() {
        int height = 500; 
        int width =(int) (height*1.56); //height = 500, width = 780;

        Game game = new Game(width, height);

        JFrame frame = new JFrame("Game");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(game);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        System.out.println("Frame size: " + frame.getSize());
        System.out.println("game size: " + game.getSize());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调整JFrame大小或最大化JPanel时如何居中?

来自分类Dev

调整图像大小以适合JLabel

来自分类Dev

调整JFrame大小后,JScrollPane折叠

来自分类Dev

PHP调整图像大小以适合特定区域

来自分类Dev

如何调整JPanel的大小

来自分类Dev

为什么将JFrame调整大小后添加图像

来自分类Dev

在JFrame中调整JPanel的大小

来自分类Dev

JPanel仅在调整窗口大小(JFrame)时显示

来自分类Dev

在调整JFrame的大小之前,JPanel不会完全显示

来自分类Dev

调整大小以适合div的图标

来自分类Dev

调整JFrame Java西侧的大小

来自分类Dev

调整图像大小,使其适合屏幕大小

来自分类Dev

调整JFrame大小或最大化JPanel时如何居中?

来自分类Dev

JFrame不使用JPanel调整大小

来自分类Dev

调整元素大小以适合容器

来自分类Dev

调整JFrame的大小以适合JPanel

来自分类Dev

控件不适合调整WPF的大小

来自分类Dev

右侧调整Jframe的大小

来自分类Dev

使组件居中并调整JFrame的大小

来自分类Dev

JFrame大小,调整大小,全屏

来自分类Dev

宽度调整大小后,网格列未折叠以适合内容

来自分类Dev

在调整JFrame的大小之前,JPanel不会完全显示

来自分类Dev

CSS / JS调整大小以适合图像大小

来自分类Dev

调整大小以适合div的图标

来自分类Dev

调整图形大小以适合 PictureBox

来自分类Dev

调整 UICollectionViewCell 的大小以适合图像

来自分类Dev

同时调整 JPanel 大小时调整图像大小

来自分类Dev

调整 Jpanel 网格列的大小

来自分类Dev

JPanel 在 JFrame 中未正确调整大小;使用 GridBagConstraints