【问题标题】:JFrame not the size I set it toJFrame 不是我设置的大小
【发布时间】:2020-04-22 19:24:29
【问题描述】:

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

我正在尝试将帧大小调整为 1280 x 720。但是当我将游戏导出到 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() 但我不知道我会怎么做,即使我尝试它也没有任何作用。

附言。是的,我知道我的代码很乱。

【问题讨论】:

    标签: java swing jframe runnable-jar


    【解决方案1】:
    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();
    

    【讨论】:

    • 没用,但还是谢谢你。我认为这只是我的电脑一般有问题,因为它调整大小不正确,就像我把它放得太 500、500 一样,它会接近那个但稍微偏离。我知道出了什么问题,但我相信我很快就会弄清楚
    • ike if I put it too 500, 500 - 不知道你在说什么。您不应该在任何地方指定尺寸。发布您更新的代码来证明问题。而且您的代码甚至不需要 Game 类。第一步是学习如何以最大化状态显示框架。然后你会担心将组件添加到框架中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2013-01-17
    相关资源
    最近更新 更多