Java 什么是JPanel/Graphics方法组件?

Java 什么是JPanel/Graphics方法组件?,java,swing,inheritance,graphics,Java,Swing,Inheritance,Graphics,所以我正在尝试学习Java图形,这段代码让我感到困惑。我不明白这里有几件事: 为什么paintComponenet两次用于方法名和as 我们从super(JPanel)调用一个方法 什么是图形g,它不只是对象的参考变量吗 因为我们没有将它设置为=newgraphics() 为什么我的类中的方法名必须是paintComponent 从JPanel或super调用方法paintComponent 我的类paintComponent中的方法采用 图形对象,但paintComponent什么时候调用 图

所以我正在尝试学习Java图形,这段代码让我感到困惑。我不明白这里有几件事:

  • 为什么
    paintComponenet
    两次用于方法名和as 我们从super(
    JPanel
    )调用一个方法
  • 什么是
    图形g
    ,它不只是对象的参考变量吗 因为我们没有将它设置为
    =newgraphics()
  • 为什么我的类中的方法名必须是
    paintComponent
    JPanel
    或super调用方法
    paintComponent
  • 我的类
    paintComponent
    中的方法采用 图形对象,但
    paintComponent
    什么时候调用
    图形的参数何时插入
  • 本质上,我需要有人向我解释这个代码

    //note this is all in a class that extends JPanel, my JPanel is later placed in 
    //a JFrame which is run through main
     public void paintComponent(Graphics g) 
            {
                int width = getWidth();             
                int height = getHeight();         
    
                super.paintComponent(g);   
    
                g.setColor(Color.RED);
                g.fillRect(10, 10, 200, 200); 
                g.setColor(Color.BLUE);
                g.drawRect(10, 10, 200, 200); 
            }
    
    为什么paintComponenet使用了两次,作为方法的名称,以及我们从super(JPannel)中调用的方法

    它不会被“使用”两次。它被重写一次,但您希望调用父(JPanel)类的super方法,以便确保它自己进行内部绘制,包括绘制其子对象和清除屏幕上的任何脏部分

    什么是图形g,它不只是图形对象的一个参考变量吗?因为我们没有将它设置为=new Graphics()

    这是一个图形参数。您不需要设置它=
    newgraphics()
    ,因为JVM会为您这样做。它在需要时在后台调用该方法,并提供参数

    为什么我的类中的方法名必须是paintComponent才能从JPannel或super调用方法paintComponent

    它必须重写super的方法,以便JVM在绘制GUI时调用正确的方法

    我的类paintComponent中的方法接受图形对象的参数,但paintComponent何时被调用,以及何时插入图形的参数

    同样,当您的程序想要重新绘制GUI时,例如当您调用
    repaint()
    时,或者当操作系统想要重新绘制窗口时,例如当窗口最小化并恢复时,JVM会调用它

    您真的很想阅读图形教程:

    • :Swing图形的入门教程
    • :Swing图形高级教程
    1)为什么paintComponenet使用了两次,一次是作为方法的名称,另一次是我们从super(JPannel)中调用的方法 这里的行super.paintComponent(…)意味着我们希望首先以通常的Java方式绘制JPanel(这通常取决于所述JComponent的不透明属性,如果是真的,则程序员有责任用完全不透明的颜色填充内容区域。如果是假的,则程序员可以自由地将其保持不变。因此,为了克服与本合同相关的麻烦,super.paintCompo之所以使用NET(g),是因为它遵守规则,并根据不透明属性是真还是假执行相同的任务)

    2) 什么是图形g,它不只是一个参考变量吗 图形的对象,因为我们没有将其设置为=new Graphics(); 和 4) 我的类paintComponent中的方法采用 图形对象,但paintComponent什么时候调用,什么时候调用 是否插入图形的参数

    paintComponent
    方法是放置所有绘制代码的位置。确实,在绘制时会调用此方法,但绘制实际上是从类继承人的更高层开始的,使用
    paint
    方法(由java.awt.Component定义)。每当需要渲染组件时,绘制子系统都会执行此方法。其签名为:

    public void paint(Graphics g)
    
    javax.swing.JComponent扩展了该类,并进一步将paint方法分解为三个单独的方法,这些方法按以下顺序调用:

    protected void paintComponent(Graphics g)
    protected void paintBorder(Graphics g)
    protected void paintChildren(Graphics g)
    

    API不会阻止您的代码重写paintBorder和paintChildren,但一般来说,您没有理由这样做。出于所有实际目的,paintComponent将是您需要覆盖的唯一方法

    教程不是他真正想读的吗?:)好的,谢谢,这很有帮助。我需要更多的时间来考虑这一点,但明天我会回到这篇文章并提出一些问题more@AshwinGupta:但是,在您阅读/研究了我在答案末尾链接到的两个教程之前,请不要再问任何问题。@AshwinGupta:另外,如果您还有其他问题,请创建一个新问题。如果你在回答这个问题后再添加更多信息,那么不会有很多人看到它。