Java 未调用PaintComponent方法

Java 未调用PaintComponent方法,java,swing,Java,Swing,我编写了以下代码。一切正常。没有编译错误。然而,我只看到一扇黄色的窗户,别的什么也看不见。我在这里发布我的paintcomponent方法 我的绘画组件方法 @Override public void paintComponent(Graphics g) {super.paintComponent(g); g.setColor(Color.red); g.drawRect(x,100,150,200); fh++; }

我编写了以下代码。一切正常。没有编译错误。然而,我只看到一扇黄色的窗户,别的什么也看不见。我在这里发布我的paintcomponent方法

我的绘画组件方法

  @Override
    public void paintComponent(Graphics g)
    {super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(x,100,150,200);
        fh++;
    }
    }
I尝试扩展Jpanel、JFrame、Jcomponent等 我尝试了paint()和paintComponent()

我正在添加完整的代码以供参考 我的代码


import javax.swing.*;
import java.awt.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

class painting extends JPanel
{static Component c=new Canvas();
 static JFrame f=new JFrame();
 int fh;
 int x=50;
    public void main(String args[]) throws InterruptedException
   {
    f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    f.add(c);
     f.setVisible(true);   
     f.setSize(300,320);

     /*
     c.setSize(200,220);
     c.setBackground(Color.yellow);
     c.setForeground(Color.red);
     c.setVisible(true);
     */
     for(;x<200;x++)
     {x=x+10;
     repaint();
     Thread.sleep(10);
    }
    }
    @Override
    public void paintComponent(Graphics g)
    {super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(x,100,150,200);
        fh++;
    }
    }

导入javax.swing.*;
导入java.awt.*;
在关闭时导入静态javax.swing.JFrame.EXIT_;
类绘画扩展了JPanel
{静态组件c=新画布();
静态JFrame f=新JFrame();
int fh;
int x=50;
public void main(字符串args[])引发InterruptedException
{
f、 setDefaultCloseOperation(关闭时退出);
f、 添加(c);
f、 setVisible(真);
f、 设置大小(300320);
/*
c、 设置大小(200220);
c、 挫折地面(颜色:黄色);
c、 设置前景(颜色为红色);
c、 setVisible(真);
*/

对于(;x组件的
paintComponent
方法仅在将该组件添加到窗口时调用。您已将
new Canvas()
添加到窗口,但从未将自己的专用面板
painting
的实例添加到窗口中

您可以通过删除以下内容来修复它:

static Component c=new Canvas();
并将其替换为:

f.add(c);
为此:

f.add(new painting());

请在问题中还原整个代码。问题的答案在于该代码,而不是paintComponent方法。请告诉我您是否需要完整代码,以及我们需要完整代码的方法。您的问题最初包含该代码。请再次编辑您的问题,并为您的cl放置完整代码请回答你的问题,就像你最初发布的一样。对于我在某个地方读到的所有内容,我们不能不必要地发布整个代码,这就是我删除它的原因。我建议你不要将
AWT
组件添加到
Swing
组件中,因为结果可能无法预测。与其使用
Canvas
组件,不如如果你想画画或绘画,请使用
JPanel
并覆盖
paintComponent
。也请帮助我使用重新绘制方法。我很遗憾地通知你,组件c在创建背景色方面起着重要作用。即使我添加了这两个组件,我仍然坚持重新绘制()不,它将不起作用。您已定义了一种新类型的组件(绘制
类)使用自定义绘制行为。您必须使用该组件的实例才能查看该行为。其他组件的内置绘制组件方法不会调用您的绘制代码。感谢您的回答,我将签出并发布正确的代码如果您要发布正确的代码,请将其添加到问题的末尾;不要Don’不要改写您的原始代码!如果未来的读者看不到问题所在,那么这个问题对他们将没有用处。