如何绘制到MouseListener事件?

时间:2012-02-28 05:28:49

标签: java swing paintcomponent mouselistener

我有以下代码:

        label.addMouseListener(new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub
                    Graphics g=image.getGraphics();
                    g.setColor(Color.YELLOW);

                    g.fillRect(0, 0, image.getWidth(), image.getHeight());
                }
            }

            @Override
            public void mouseEntered(MouseEvent arg0) {}

            @Override
            public void mouseExited(MouseEvent arg0) {}

            @Override
            public void mousePressed(MouseEvent arg0) {}

            @Override
            public void mouseReleased(MouseEvent arg0) {}           
        });

图像是BufferedImage对象。但是,当我点击标签时,它不会绘制任何东西。我认为线程存在问题。我该如何解决?谢谢。

1 个答案:

答案 0 :(得分:3)

Graphics对象的互动应仅限于paintComponent方法。

是的,这是线程的问题,但并不完全像你想象的那样。

所有绘画都在调用paint()paintBackgroundpaintBorder的组件的paintComponent方法内完成。您需要设置一个标志,并在要绘制它的面板或组件上调用repaint(),而不是在鼠标处理程序事件中绘制到该区域。

在此组件中,覆盖paintComponent方法。调用super.paintComponent()并绘制标志设置后的内容。

当您在面板上调用repaint()时,它将标记要绘制的组件。然后,下次Event Dispatch Thread呈现此组件时将调用paintComponent()方法。这会将你的矩形添加到它的顶部。