在java中渲染2d图像

时间:2015-04-11 03:10:49

标签: java image swing jframe paint

我是java编程的新手,我正在尝试制作一个简单的游戏,但我需要渲染我在这里制作的图像是我在eclipse中放入的代码:

public class MainMenu extends JFrame{
 public static void main(String[] args){
        new MainMenu(); 

 }
 public MainMenu(){
     this.setSize(300, 450); 
        this.setLocationRelativeTo(null);     
        this.setResizable(true); 

        Toolkit tk = Toolkit.getDefaultToolkit(); 

        Dimension dim = tk.getScreenSize(); 

        int xPos = (dim.width / 2) - (this.getWidth() / 2);
        int yPos = (dim.height / 2) - (this.getHeight() / 2);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setLocation(xPos, yPos); 

        this.setTitle("Frame For Flamedash Testing");

        this.setVisible(true); 
 }
 public void paint(Graphics g){   
        Image img1 = Toolkit.getDefaultToolkit().getImage("mainmenuscreen.png");
        g.drawImage(img1, 20, 20, null);
 } // public void paint(Graphics g)

 public void putit() {
     boolean MainMenu = true; 

     while (MainMenu == true){
         repaint(); 
     }

}
}

当我说它一切都很好并且它没有给我任何错误然后我运行它它显示框架但没有显示图片比我全屏它因为我设置重新大小的真实它显示一个地方的默认颜色,我的尺寸设置了框架,另一个相同,但在角落和其他地方的黑色。任何有关渲染此.png图像的帮助都会有所帮助,请提前感谢您。

3 个答案:

答案 0 :(得分:4)

不要覆盖JFrame中的paint()。

显示图片的最简单方法是使用带有JLabel的{​​{1}}。

阅读How to Use Icons上Swing教程中的部分,了解更多信息和示例。本教程将向您展示如何更好地构建代码。

如果您真的想自己绘制图像,本教程还有一个关于Icon的部分。自定义绘画是通过覆盖JPanel的Custom Painting完成的,然后将面板添加到框架中。

答案 1 :(得分:2)

首先,在你的绘画方法中,你应该总是调用super.paint,否则你就会破坏绘画链。

至于你的问题,

您可以调用重绘来强制绘画。保留一个变量来保存main中的实例并调用repaint:

public MainMenu() {
    ...

    repaint();
}

请注意,从paint方法加载图像是一个非常糟糕的主意,因为每次绘制帧时都会加载它。

答案 2 :(得分:1)

您在该代码中遇到了几个问题,包括:

  • 直接在JFrame中绘制,可能会产生令人不快的副作用
  • 尝试从绘画方法中读取图像。

您实际的问题通常是指定图像的错误路径,为了解决这个问题,您需要确定Java正在查看的实际用户目录作为路径的基础。这可以通过调用

找到
System.out.println(System.getProperty("user.dir"));