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