有人会说我为什么不调用PF类的函数paintComponent吗?

public class Fenetre
{

    private JFrame jframe;

    public Fenetre()
    {
        jframe = new JFrame(" works");
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setLayout(new BorderLayout());
        jframe.setLocationRelativeTo(null);
        jframe.setContentPane(new P());
        jframe.pack();
        jframe.setVisible(true);
    }

    public class P extends JComponent
    {
        public P()
        {
            this.setPreferredSize(new Dimension(WI,HI));
            this.add(new PF());
        }

        public class PA extends JComponent
        {
          @Override protected void paintComponent(Graphics g) {

                DrawX(g);
                DrawY(g);
            }

            public void DrawX(Graphics g)
            {
              \* .. */
            }

            public void DrawY(Graphics g)
            {
               \* ..*/
            }

        }

        public class PF extends PA
        {

            @Override protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                drawS(g);
                drawT(g);
            }

            public void drawS(Graphics g)
            { \* .. */
             }

            public void drawT(Graphics g)
            {
               \* ... */
            }

        }


当我在PF构造函数中设置setSize函数时,它可以工作,但是setPreferredSize也可以工作,但不允许类PF调整大小,也就是说,如果我调整Jframe的大小,则PF绘制不重新调整大小。

希望有人能帮助我,谢谢。

最佳答案

可能的问题可能与PAPF没有首选大小(默认值为0x0)以及默认情况下JComponent没有布局管理器有关

绘画子系统已确定不需要对子组件进行绘画,因为从技术上讲,子组件在屏幕上不可见

首先设置P的布局管理器,并覆盖getPreferredSizePA方法。

当您覆盖该方法时,始终调用super.paintComponent非常重要。当您处理诸如JComponent之类的透明组件时,这非常重要,因为如果您不这样做,这会引入非常讨厌的绘画瑕疵

关于java - 内部类的paintComponent未调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19529644/

10-10 13:42