Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java在JPanel类之外绘制图像_Java_Image_Class_Jpanel_Paint - Fatal编程技术网

Java在JPanel类之外绘制图像

Java在JPanel类之外绘制图像,java,image,class,jpanel,paint,Java,Image,Class,Jpanel,Paint,我有一个WorldManager类,它扩展了JPanel,并具有: public void paint(图形g){} 我想做的是拥有独立的类,比如一个拥有自己的绘制方法的世界级,并且能够像这样调用该类的绘制方法: public void paint(Graphics g){world1.paint();hero.paint();}原则上,您的方法没有问题 正如垃圾神所指出的,您应该覆盖paintComponent方法而不是paint方法 原因是:这样,paintBorder()和paintChi

我有一个WorldManager类,它扩展了JPanel,并具有:

public void paint(图形g){}

我想做的是拥有独立的类,比如一个拥有自己的绘制方法的世界级,并且能够像这样调用该类的绘制方法:


public void paint(Graphics g){world1.paint();hero.paint();}

原则上,您的方法没有问题

  • 正如垃圾神所指出的,您应该覆盖paintComponent方法而不是paint方法

    原因是:这样,
    paintBorder()
    paintChildren()
    方法可以绘制边框和子组件,您可以自由地只考虑真实内容

  • 您的其他绘制方法也应该采用图形参数(或者Graphics2D,如果您需要此参数并且只想强制转换一次),然后被调用
  • 以下是一个例子:

    class WorldManager extends JPanel
    {
    
        private World world1;
        private Person hero;
    
        public void paintComponent(Graphics g) {
             super.paintComponent(); // paints the background, if opaque
             world.paint(g);
             hero.paint(g);
        }
    }
    

    那么,实际上你的问题是什么?

    “Swing程序应该重写
    paintComponent()
    ,而不是重写
    paint()
    。@Paulo所以我在WorldManager中将我的paint方法改为paintComponent方法,并称为super.paintComponent(g)这是可行的,但你能解释一下为什么我必须使用油漆组件而不是常规的油漆方法吗?@Chris请不要忘记将问题标记为“已回答/正确”。这有助于以后搜索答案的人。