为什么组件在使用 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);
}
}
因为你不应该@Override
paint()
方法。您应该改写 paintComponent()
方法。您还应该在该方法中调用 super.paintComponent()
以尊重油漆链。
您可以在 Swing 的 documentation 中找到有关自定义绘画的更多信息。
我也不建议您延长 JDesktopPane
。桌面窗格是 top level containers,通常作为其他组件的宿主。换句话说,保持 JDesktopPane
只是一个 JDesktopPane
,然后创建一个具有覆盖 paintComponent()
的 JPanel。最后,将此面板添加到桌面窗格。
我创建了一个 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);
}
}
因为你不应该@Override
paint()
方法。您应该改写 paintComponent()
方法。您还应该在该方法中调用 super.paintComponent()
以尊重油漆链。
您可以在 Swing 的 documentation 中找到有关自定义绘画的更多信息。
我也不建议您延长 JDesktopPane
。桌面窗格是 top level containers,通常作为其他组件的宿主。换句话说,保持 JDesktopPane
只是一个 JDesktopPane
,然后创建一个具有覆盖 paintComponent()
的 JPanel。最后,将此面板添加到桌面窗格。