Java图形PaintComponent问题。似乎无法找到错误

时间:2015-10-05 16:47:14

标签: java swing graphics

我正在制作一个用于绘制图像的程序,似乎我犯了一个错误,我的程序只是不想绘制图像。有人可以指出mi的错误,因为我真的没有看到它。

package basic_game_programing;

import java.awt.Graphics;
import java.awt.Image;


import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Practise extends JPanel {

public Image image;

        //#####PAINT__FUNCTION#####
        public void PaintComponent(Graphics g){
            super.paintComponent(g);

              ImageIcon character = new ImageIcon("C:/Documents and Settings/Josip/Desktop/game Šlije/CompletedBlueGuy.PNG");
              image = character.getImage();

              g.drawImage(image,20,20,null);
              g.fillRect(20, 20, 100, 100);
        }



//######MAIN__FUCTION#######
public static void main(String[]args){

    Practise panel = new Practise();


    //SETTING UP THE FRAME
    JFrame frame = new JFrame();
    //
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500,500);
    frame.add(panel);


    //SETTING UP THE PANEL

    //









}

}

1 个答案:

答案 0 :(得分:2)

您使用PaintComponent而不是大都会化paintComponent(注意第一个“P”)。

  • 因此将PaintComponent更改为paintComponent
  • 使用方法上方的@Override注释让编译器告诉您何时出现此类错误。
  • 永远不要将图像读入绘画方法,因为这会减慢需要快速的方法,并且当一次读取足够时,可以反复读取图像。
  • 该方法应为protected而不是public
  • 使用ImageIO.read(...)读取您的图片,并使用jar文件中的资源和相对路径,而不是使用文件或ImageIcons。
  • 之后>添加所有组件时,请不要在JFrame上调用setVisible(true),否则有些可能不会显示。
  • 请阅读教程,因为大部分内容都在那里得到了很好的解释。

如,

public class Practise extends JPanel {

    private Image image;

    public Practice() {
        // read in your image here
        image = ImageIO.read(.......); // fill in the ...
    }

    @Override // use override to have the compiler warn you of mistakes
    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        // never read within a painting method
        // ImageIcon character = new ImageIcon("C:/Documents and Settings/Josip/Desktop/game Šlije/CompletedBlueGuy.PNG");
        // image = character.getImage();

        g.drawImage(image, 20, 20, this);
        g.fillRect(20, 20, 100, 100);
    }
}