繁体   English   中英

Java JFrame 打开太小

[英]Java JFrame Opens too small

我正在尝试在 Java 中创建 PingPong,但是我在为球创建边界时遇到了麻烦。 经过测试,发现JFrame打开太小; 我将宽度设置为 500,JFrame 以 484 像素打开。 为什么是这样?

这是我的游戏课:

公共类游戏扩展画布{

public static void main(String[] args){
    new Game();
}

Display d;


public Game(){
    d = new Display(this);
    requestFocus();
}


public void start(){
    System.out.println("Game started.");
}
public void stop(){

}


public void paint(Graphics g){
    g.setColor(Color.DARK_GRAY);
    g.fillRect(0, 0, 500, 400);
    g.setColor(Color.GREEN);
    g.drawLine(483, 0, 483, 399);
    g.drawLine(0, 399, 499, 399);
}

}

这是我的 JFrame 类:

公共类显示扩展 JFrame {

JFrame frame;
Dimension screenSize;

public Display(Game game){
    frame = new JFrame("PingPong");
    screenSize = new Dimension(500, 400);



    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(true);
    //frame.setSize(500, 400);
    frame.setPreferredSize(screenSize);
    frame.setMinimumSize(screenSize);
    frame.setMaximumSize(screenSize);

    frame.setLocationRelativeTo(null);
    frame.add(game);
    //frame.pack();
    game.start();

}

}

当您在JFrame上调用setSize时,它包括标题栏的大小,以及窗口周围的任何其他装饰。 因此,您拥有的实际可绘制区域将比这少一点。 您可以通过设置Game的首选大小并在JFrame上使用pack解决此问题。

因此,如果您将代码更改为:

public Display(Game game){
    super("PingPong");
    screenSize = new Dimension(500, 400);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(true);
    game.setPreferredSize(screenSize);

    setLocationRelativeTo(null);
    add(game);
    pack();
    setVisible(true);
    game.start();
}

它会起作用。 这会告诉你的实际游戏它想要的大小(500x400),然后调整框架大小,以便它可以完全包含它。 这将为您提供 500x400 像素以用于您的实际绘图。

请注意,我删除了所有frame引用。 因为Display本身已经是一个JFrame你不需要再创建一个。 只需使用Display对象本身。

只需删除frame.pack()然后它就会工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM