Java 如何进入mouselisterevent?

Java 如何进入mouselisterevent?,java,swing,paintcomponent,mouselistener,Java,Swing,Paintcomponent,Mouselistener,我有以下代码: label.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub Graphics g=image.getGraphics();

我有以下代码:

        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) {}           
        });

图像是BuffereImage对象。但当我点击标签时,它不会画任何东西。我认为线程有问题。我怎样才能修好它?多谢各位

图形
对象的交互应限于
paintComponent
方法。

是的,这是线程的一个问题,但不是完全按照您的想法

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

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


在面板上调用
repaint()
时,它将标记要绘制的组件。然后,下次事件分派线程呈现此组件时,将调用
paintComponent()
方法。这会将矩形添加到它的顶部。

这是否仅在绘制Swing/AWT组件的图形对象时适用?在本例中,说明image是一个BufferedImage,在这种情况下,我可以想象从任何线程或方法绘制到它。但是,基于给定的代码,我无法确定此图像稍后将用于何处。为了更快获得更好的帮助,请发布一个。您所展示的任何代码中的线程都没有问题。您丢失了很多代码(尤其是paintComponent重写),并且显示了不必要的代码(所有这些空白方法)。如果仍然卡住,你最好接受安德鲁的建议,创造并展示一个新的。