未调用内部类的paintComponent

时间:2013-10-22 22:39:42

标签: java swing inner-classes paintcomponent

有人会知道我为什么不调用类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绘制不会调整大小..

希望有人可以帮助我,谢谢。

1 个答案:

答案 0 :(得分:3)

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

paint子系统已确定子组件不需要按原样绘制,从技术上讲,在屏幕上看不到

首先设置P的布局管理器并覆盖getPreferredSize的{​​{1}}方法。

当你覆盖方法时,你总是打电话给PA是非常重要的。当你处理像super.paintComponent这样的透明组件时,这是非常重要的,因为如果你不这样做会引入非常讨厌的绘画工件