簡體   English   中英

JPanel和JFrame坐標混亂

[英]JPanel and JFrame coordinate messed up

我正在嘗試使用JPanle和JFrame編寫游戲。 我在框架內設置了一個面板。 當我在面板上繪制時,面板的矩形大小為0,0。 矩形向上和向左移動一些像素。 我該如何解決這個問題? 我用谷歌搜索,看到了insets方法,但是我不想每次繪制時都用它來計算坐標。

這是代碼

public class Game extends JFrame{

public Game(){
    this.getContentPane().setPreferredSize(new Dimension(800,600));  
    pane p = new pane();
    this.getContentPane().add(p,BorderLayout.CENTER);
    p.setPreferredSize(new Dimension(800,600));
    pack();
    setResizable(false);
    setVisible(true);


}


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

}

public class pane extends JPanel{

public pane(){

setDoubleBuffered(false);
setBackground(Color.black);
setPreferredSize( new Dimension(800, 600));

setFocusable(true);
requestFocus(); 
}

@Override
public void paint(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(0, 0, 800, 600);
    g.setColor(Color.black);
    g.fillRect(0, 0, 800, 600);

}
}

屏幕截圖鏈接

實際上,面板沒有偏移,它位於0,0。 問題在於該面板的實際大小為810,610,而不是800,600。 由於某種原因(到目前為止,我無法找到,並且如果有人有我想學習的想法),當您在JFrame上調用setResizable(false)時,其inset會被修改,最終導致您的內容窗格變為比預期的要大(至少在JDK6 / Win7上)。 在添加組件和包裝框架之前,請調用setResizable(false) ,它可以工作。

還可以考慮繪制一個與面板大小相同的矩形( g.fillRect(0, 0, getWidth(), getHeight());以便確保無論發生什么情況都可以填充整個區域。

有什么理由用白色填充背景,然后用黑色替代?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM