簡體   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