当前位置: 首页 > 知识库问答 >
问题:

调用super.paintComponent()重要吗?

严令秋
2023-03-14

当在子类中重写它时,调用油漆组件方法将其定义为超类的重要性是什么。我无法理解原因。例如:请参阅下面的代码以显示填充的弧:

package graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Color;
import java.awt.Graphics;

@SuppressWarnings("serial")
class DrawArcs2 extends JFrame {

    public DrawArcs2() {
        setTitle("The Four Fan Blades");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        add(new BladesPanel());
    }

    class BladesPanel extends JPanel {
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            g.setColor(Color.MAGENTA);

            int xCenter = getWidth() / 2;
            int yCenter = getHeight() / 2;
            int radius = (int)(Math.min(getWidth(), getHeight()) * 0.4);

            int x = xCenter - radius;
            int y = yCenter - radius;

            g.fillArc(x, y, 2 * radius, 2 * radius, 0, 30);
            g.fillArc(x, y, 2 * radius, 2 * radius, 90, 30);
            g.fillArc(x, y, 2 * radius, 2 * radius, 180, 30);
            g.fillArc(x, y, 2 * radius, 2 * radius, 270, 30);
        }
    }

    public static void main(String[] args) {
        DrawArcs2 fanBlades = new DrawArcs2();
        fanBlades.setSize(300,300);
        fanBlades.setVisible(true);
    }
}

共有2个答案

颛孙炜
2023-03-14

通常它很重要。如果不声明它,它包含的大多数对象将无法访问。它有点像一个对象。您需要声明它才能调用该类的其他函数。

田嘉澍
2023-03-14

简短的回答是肯定的,这很重要。

绘图组件的工作之一是为绘图准备Graphics上下文,这通常是通过用当前组件的背景颜色填充Graphics上下文来完成的。

但是,更重要的是,它是形成绘制方法链的方法之一,这些方法一起生成绘制结果,您应该继续保持该链接,以防将来更改绘制组件方法,或者您扩展的组件对其进行其他处理(例如,如JTable)

未能调用它可能会导致任何数量的图形故障和伪影,这些故障和伪影难以跟踪,甚至难以可靠地生成

看看绘画在AWT和摆动和执行自定义绘画有关绘画过程的更多细节

 类似资料:
  • 问题内容: 有什么作用(特别是当我们将其放入paintComponent()方法中时)?令我惊讶的是,我之前没有人问过这个问题。 我在Java Graphics上挖了我的学校笔记,在这行代码中唯一提到的是。 但是,这几周来,我一直在练习和使用Java paintComponent()方法。到目前为止,我还没有将该行包含在我的代码中,并且一切似乎都运行良好(到目前为止)。所以.. 问题: 它有什么作

  • 做什么(特别是当我们将它放在paintComponent()方法中时)?我很惊讶以前没有人问过这个问题。 我翻出我关于Java图形的学校笔记,它在这行代码上唯一提到的是。 然而,这几周我一直在练习和学习Java的paintComponent()方法。到目前为止,我还没有将这一行包含在我的代码中,而且一切似乎都运行得很好(到目前为止)。所以.. 问题: 它做什么? 何时需要使用它? 在paintCo

  • 问题内容: 假设我有以下情况: 和 然后首先访问,进入然后通知它并返回状态。调用在方法中的位置重要吗?即使将调用放置在方法内部的不同位置,我也没有注意到行为的变化。 拨打电话时,是否应立即通知? 问题答案: 该位置的内通话块并 不会 因为根据定义无所谓,如果你仍然在块,那么你仍然持有锁。 调用notify()时不应该立即通知线程吗? 是。调用将等待队列(等待条件)中的线程之一(如果有)放入阻塞队列

  • 问题内容: 我对几件事有些困惑: 示例代码,显示了我的问题,这是无法编译的 我创建了一个全局对象, 并在其中绘制了内容 ,但我没有在游戏循环内调用 它,这样做是否是一种好习惯? 我应该在循环和函数内部使用吗? 另一件事,如何正常工作?,因为尝试删除此行代码,因此没有任何反应。 我了解java docs的dispose()的工作方式 , 但是我没有注意到dispose()与否的任何区别。 我的程序运

  • 问题内容: 假设我有以下课程: 我想知道是否传递以下构造函数很重要: 我当前的代码工作正常,但是我想知道这是否是一个好习惯。 问题答案: 根据React团队的Ben Alpert的说法,如果您打算在构造函数内部使用,则仅需要将prop传递给构造函数。调用构造函数后,React从外部将props附加到组件。

  • 我知道其他人问过这个(或类似的)问题,但没有一个解决方案对我有帮助。我有3节课: 我的测试类: 我想验证B. subMethod()是否在A. superMethod()中被调用。我如何才能完成此任务。我知道我需要使用PowerMock来完成此任务,但我不确定如何。此外,我不允许更改有关A类或B类的任何内容。 任何帮助都将不胜感激!