Java鼠标监听器

3

如何编写一个鼠标监听器来响应在JFrame中按下任何对象或一个特定对象的操作?

这是我的鼠标监听器 -

class mouse extends MouseAdapter
{
   public void  mousePressed(MouseEvent event)
   {
     yearLabel.setText("nu");
   }
 }
2个回答

9

您可以通过 Toolkit.getDefaultToolkit().addAWTEventListener(listener,mask) 添加全局鼠标监听器。

以下是一个示例:

public class SwingTest{
    public static void main(String[] args) {
        JPanel mainPanel = new JPanel();
        mainPanel.add(new JButton("button"));
        final JLabel label = new JLabel("label");
        mainPanel.add(label);

        showFrame("", mainPanel);

        Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
            public void eventDispatched(AWTEvent event) {
                if(event instanceof MouseEvent){
                    MouseEvent evt = (MouseEvent)event;
                    if(evt.getID() == MouseEvent.MOUSE_CLICKED){
                        label.setText("mouse clicked at: " + evt.getPoint());
                    }
                }
            }
        }, AWTEvent.MOUSE_EVENT_MASK);
    }

    public static JFrame showFrame(String title, Component component) {
        JFrame frame = new JFrame();
        frame.setTitle(title);
        frame.getContentPane().add(component, BorderLayout.CENTER);
        frame.setSize(900, 700);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        return frame;
    }
}

不错的例子 +1,顺便说一句,如果你只想放置一个 JComponent,那么 frame.getContentPane().add(component, BorderLayout.CENTER); 是没有用的,只需要使用 frame.add(component) 并放置在 BorderLayout.CENTER 上,如果有两个或更多,则使用的 LayoutManager 是 FlowLayout。 - mKorbel

2

您是否将此侦听器附加到包含 yearLabel 的组件上?此外,我应该指出,按照惯例,类名应大写。否则,您会让其他程序员感到困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接