JPanel不会使用paintComponent绘制

时间:2014-01-28 04:59:03

标签: java swing graphics jframe paintcomponent

根本不会画任何想法? 后面板上没有显示任何内容,如何使用mouseDragged事件进行绘制?

我甚至无法显示单行...这是源代码..我添加了Jbutton只是为了查看Panel是否实际显示

public class pinta extends JFrame {

HandlerClass handler=new HandlerClass();
    JPanel back=new JPanel();
    public pinta(){
        setSize(500,500);
        setResizable(true);
        getContentPane().setLayout(new BorderLayout());
        back.setBackground(Color.white);
        back.setSize(500,500);
        this.add(back);
        back.add(new JButton("test"));
        back.addMouseMotionListener(handler);
        back.setOpaque(true);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }    

    public void paintComponent(Graphics g){
        super.paintComponents(g);
        g.setColor(Color.black);

        Graphics2D g2d = (Graphics2D)g;
        g2d.fillOval(100, 100, 20, 10);
        g2d.setPaintMode();
        g2d.setStroke(new BasicStroke(1));

    }

    public class HandlerClass implements MouseMotionListener{
        int x, y;

        public int getX() {
            return x;
        }
        public void setX(int x) {
            this.x = x;
        }
        public int getY() {
            return y;
        }
        public void setY(int y) {
            this.y = y;
        }
        public void mouseDragged(MouseEvent e) {
            x=e.getX();
            y=e.getY(); 
        }
        public void mouseEntered(MouseEvent e){ 
        }

        public void mouseMoved(MouseEvent e) {
        }
    }
}

1 个答案:

答案 0 :(得分:3)

JFrame没有方法调用paintComponent。如果您使用@Override注释,则编译器将失败。

另请注意,您正在呼叫super.paintComponents - 请注意最后的“s”,这应该是问题的交互者

JComponent(或JPanel延伸JComponent)就是您所追求的目标。

请查看Performing Custom Painting了解详情

我还应该提到back.setSize(500,500)是无关紧要的,因为布局管理器将决定它想要制作组件的大小