我如何找到扩展 class 的方法在哪里

How do i find where the method of an extended class is

我仍在学习编码,但我找不到 paintComponent 方法的来源,想了解如何找到它以供将来参考。

import java.awt.*;
import javax.swing.*;
public class Peach extends JPanel{
    public void paintComponent (Graphics g){


    }
}

一般这样的问题,看文档就可以解决了。如果您在 class 中看不到某个方法,它很可能是从父级继承的。

JPanel Docs

如果您查看此处然后搜索 paintComponent,您将找到该方法。

您还可以从 IDE 中打开 class 声明,您将能够找到该方法。

paintComponent method actually comes from abstract class JComponent which is extend by the JPanel class 又是您要扩展的内容。

paintComponent 的实际实现是:

/**
 * Calls the UI delegate's paint method, if the UI delegate
 * is non-<code>null</code>.  We pass the delegate a copy of the
 * <code>Graphics</code> object to protect the rest of the
 * paint code from irrevocable changes
 * (for example, <code>Graphics.translate</code>).
 * <p>
 * If you override this in a subclass you should not make permanent
 * changes to the passed in <code>Graphics</code>. For example, you
 * should not alter the clip <code>Rectangle</code> or modify the
 * transform. If you need to do these operations you may find it
 * easier to create a new <code>Graphics</code> from the passed in
 * <code>Graphics</code> and manipulate it. Further, if you do not
 * invoker super's implementation you must honor the opaque property,
 * that is
 * if this component is opaque, you must completely fill in the background
 * in a non-opaque color. If you do not honor the opaque property you
 * will likely see visual artifacts.
 * <p>
 * The passed in <code>Graphics</code> object might
 * have a transform other than the identify transform
 * installed on it.  In this case, you might get
 * unexpected results if you cumulatively apply
 * another transform.
 *
 * @param g the <code>Graphics</code> object to protect
 * @see #paint
 * @see ComponentUI
 */
protected void paintComponent(Graphics g) {
    if (ui != null) {
        Graphics scratchGraphics = (g == null) ? null : g.create();
        try {
            ui.update(scratchGraphics, this);
        }
        finally {
            scratchGraphics.dispose();
        }
    }
}