为什么组件在使用 paint 方法后不可见

Why components are not visible after use paint method to parent

我创建了一个 JDesktopPane 对象作为内部 class 并且我使用了 @Override paint 方法来`JDesktopPane。在我这样做之后,我现在可以向它添加任何组件(组件不可见)。为什么它不起作用

import javax.swing.*;
import java.awt.*;

public class Example {
    public static void main(String[] args){
        JFrame frame = new JFrame("Test");
        frame.setSize(500,500);
        frame.setVisible(true);

        JDesktopPane pane = new JDesktopPane(){
            public void paint(Graphics g){
                
            }
        };
        frame.add(pane);

        JInternalFrame inf = new JInternalFrame();
        inf.setVisible(true);
        inf.setSize(100,100);
        pane.add(inf);
    }
}

因为你不应该@Overridepaint()方法。您应该改写 paintComponent() 方法。您还应该在该方法中调用 super.paintComponent() 以尊重油漆链。

您可以在 Swing 的 documentation 中找到有关自定义绘画的更多信息。

我也不建议您延长 JDesktopPane。桌面窗格是 top level containers,通常作为其他组件的宿主。换句话说,保持 JDesktopPane 只是一个 JDesktopPane,然后创建一个具有覆盖 paintComponent() 的 JPanel。最后,将此面板添加到桌面窗格。