java - JFrame 不是我设置的大小

标签 java swing jframe runnable-jar

我已经遵循了一些有关如何解决此问题的教程,但没有一个有帮助

我试图做的是将帧大小调整为 1280 x 720。但是当我将游戏导出到 jar 时,帧大小比应有的小,这导致了各种问题。另一个令人困惑的事情是,当我把 jar 给别人时,它工作正常,对他们来说没有任何问题。这非常令人困惑且非常烦人。

我的代码:

package com.teto.main;
import java.awt.Canvas;
import java.awt.Cursor;
import java.awt.Dimension;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class FullFrame extends Canvas {
    private static final long serialVersionUID = 5486926782194361510L;
    Cursor csr = new Cursor(Cursor.CROSSHAIR_CURSOR);
    public FullFrame(int width, int height, String title, Game game) {
        JFrame frame = new JFrame(title);
        frame.setPreferredSize(new Dimension(width, height));
        frame.setMaximumSize(new Dimension(width, height));
        frame.setMinimumSize(new Dimension(width, height));
        frame.setSize(new Dimension(width, height));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String imageName = "lgico.png";
        URL imageUrl = frame.getClass().getResource(imageName);

        if (imageUrl == null)
        {
            System.out.println("bruh");
            imageUrl = Thread.currentThread().getContextClassLoader().getResource(imageName);
        }

        ImageIcon icon = new ImageIcon( imageUrl );

        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setIconImage(icon.getImage());
        frame.setCursor(csr);
        frame.add(game);
        game.start();
        frame.pack();
    }
}

人们说你应该重写 getPreferredSize() 但我不知道如何做到这一点,即使我尝试它也不会执行任何操作。

诗。是的,我知道我的代码很乱。

最佳答案

frame.add(game);

应在框架可见之前将组件添加到框架中。

    frame.setPreferredSize(new Dimension(width, height));
    frame.setMaximumSize(new Dimension(width, height));
    frame.setMinimumSize(new Dimension(width, height));
    frame.setSize(new Dimension(width, height));
  1. 上面的代码什么也没做。它什么都不做的原因是因为您稍后在代码中使用了frame.pack(),它将根据添加到框架的组件的首选大小来调整框架的大小。因此,框架大小将是您的 Game 类的首选大小,加上标题栏和框架边框的额外空间。
  2. 您不应尝试使用这些方法来控制帧大小。您不应该指定尺寸,因为您不知道玩游戏的每台显示器的分辨率是多少。

设置尺寸的更好方法是告诉框架填满屏幕。

所以你的代码应该重组为如下所示:

// load the image
ImageIcon icon = new ImageIcon( imageUrl );

JFrame frame = new JFrame(title);
frame.add(game);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setCursor(csr);
frame.setIconImage(icon.getImage());
frame.setResizable(false);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // this maximizes the frame
frame.setVisible(true);
game.start();

关于java - JFrame 不是我设置的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373469/

相关文章:

java - 如何删除字符串之间的空白字符?

java - MTN 移动货币整合

java swing JTabbedPane 位置选项卡标题从右下到左

java - JButton 布局问题

java - 刷新主框架时没有任何反应(JAVA)

java - 如何使用itext在Jframe中打开pdf文件

java - 如何使用 JDBI 将 2d 数组从 PostgreSQL DB 转换为 java 2d 数组?

java - 重新验证和重绘不起作用

java - Java中如何使用Jframe登录成功后显示用户信息[登录表单]

java - 在 JFrame 上画线时出现问题