[英]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.