Java绘制图像位置错误,剪贴区位置错误

时间:2015-06-03 06:35:46

标签: java swing graphics jpanel drawimage

当我看到我的应用程序时,它绘制的图像不在(0,0)上,而是在程序的中间位置,所以我调试了我的程序,我看到clipRegion.lox是456而loy是130,这是程序绘制的位置(0,0)。所以我认为Clip Region的位置是错误的,但我不知道如何修复它。有什么帮助吗?

代码:

public void changeState(int bef,int cur){
    if(bef==1){
        if(cur==2){
            intro.setVisible(false);
            this.setContentPane(play);
            play.init();
            play.setVisible(true);
        }
    }
}

这是我的Panel首次启动时。在play.init()中,我将socket设置为与服务器程序连接,并启动声音文件。就是这样。

 public void paintComponent(Graphics g){
    super.paintComponent(g);
    this.setBackground(new Color(255,255,255));
    g.drawImage(backgroundImg, 0, 0, this);
    g.drawImage(player, 368, 280, this);
    for(int i=0;i<60;i++){
        for(int j=0;j<100;j++){
            if(map[i][j]==1){
                g.drawImage(stone, (j-10)*32-dx, (i-10)*32, this);
            }
            else if(map[i][j]==2){
                if(i>0&&map[i-1][j]==0) g.drawImage(grass, (j-10)*32-dx, (i-10)*32, this);
                else g.drawImage(dirt, (j-10)*32-dx,(i-10)*32,this);
            }
        }
    }
    g.drawString(servermessage, 320, 200);
}
  • 我删除了我的Println代码和线程睡眠代码。它仅用于调试,但是当我删除时,没有任何改变。

另外,我重新绘制了它,它吸引了(0,0),但它没有全屏显示。

我认为绘制的图像大小与(456,130)到(800,600)大小相同,所以我觉得图片已经剪掉了。

由于声誉低,我无法发布我的照片......还有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

this.setBackground(new Color(255,255,255));

不要在绘画方法中设置背景。在类的构造函数中设置背景。

  

它不是在(0,0)上绘制我的图像,而是在我的程序中间的某个地方,       g.drawImage(backgroundImg,0,0,this);

不,图像是在(0,0)绘制的,它相对于面板的位置。这意味着面板相对于框架没有被绘制在(0,0)处。这可能是因为您使用的布局管理器将面板定位在框架的中心。检查您的布局代码。

  

我看到clipRegion.lox是456,loy是130和

如果您认为剪裁区域错误,可能是因为您的面板没有首选尺寸。每当您进行自定义绘制时,您应该覆盖getPreferredSize()方法以返回面板的大小,以便布局管理器可以正常工作。也许首选大小应该是图像的大小?

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。