Java 如何使我自己的鼠标侦听器处理当前表单?

Java 如何使我自己的鼠标侦听器处理当前表单?,java,Java,我想在另一个类中创建我自己的MouseStener。容易做。但是我想让它破坏当前的JFrame(close按钮),如果MouseListener在当前类中,这很容易做到。但这不是我想要的。我想创建我自己的泛型类,它可以通过--> 我知道问题是什么。我需要向类mouse listener传递一个表示当前表单的参数。我试过几种不同的方法,但都不起作用 我不想使用静态变量 问题:如何将当前形式的变量传递给myMouseCloseListener(…)? 代码: 错误消息清楚地解释了问题。方法addAc

我想在另一个类中创建我自己的MouseStener。容易做。但是我想让它破坏当前的JFrame(close按钮),如果MouseListener在当前类中,这很容易做到。但这不是我想要的。我想创建我自己的泛型类,它可以通过-->

我知道问题是什么。我需要向类mouse listener传递一个表示当前表单的参数。我试过几种不同的方法,但都不起作用

我不想使用静态变量

问题:如何将当前形式的变量传递给myMouseCloseListener(…)?

代码:


错误消息清楚地解释了问题。方法
addActionListener(ActionListener)
ActionListener
实例作为其参数。您正在传入一个
MouseListener
实例。如果要传入
MouseListener
,则需要使用
addMouseListener(MouseListener)

您也不需要传入JFrame实例。在我脑海中,可能无法编译,请仔细检查自己:

@Override
public void mousePressed(final MouseEvent e) {
    final Component source = e.getComponent();
    final JFrame frame = (JFrame) SwingUtilities.getRoot(source);
    frame.dispose();
}

当然,添加一个
ActionListener
比添加一个
MouseListener
要容易得多,因为这样您只实现了一个方法。如果您坚持使用
MouseListener
,我强烈建议扩展
MouseAdapter
,这样您只需覆盖您关心的方法。

错误消息清楚地解释了问题。方法
addActionListener(ActionListener)
ActionListener
实例作为其参数。您正在传入一个
MouseListener
实例。如果要传入
MouseListener
,则需要使用
addMouseListener(MouseListener)

您也不需要传入JFrame实例。在我脑海中,可能无法编译,请仔细检查自己:

@Override
public void mousePressed(final MouseEvent e) {
    final Component source = e.getComponent();
    final JFrame frame = (JFrame) SwingUtilities.getRoot(source);
    frame.dispose();
}

当然,添加一个
ActionListener
比添加一个
MouseListener
要容易得多,因为这样您只实现了一个方法。如果您坚持使用
MouseListener
,我强烈建议扩展
MouseAdapter
,这样您只需覆盖您关心的方法。

错误消息清楚地解释了问题。方法
addActionListener(ActionListener)
ActionListener
实例作为其参数。您正在传入一个
MouseListener
实例。如果要传入
MouseListener
,则需要使用
addMouseListener(MouseListener)

您也不需要传入JFrame实例。在我脑海中,可能无法编译,请仔细检查自己:

@Override
public void mousePressed(final MouseEvent e) {
    final Component source = e.getComponent();
    final JFrame frame = (JFrame) SwingUtilities.getRoot(source);
    frame.dispose();
}

当然,添加一个
ActionListener
比添加一个
MouseListener
要容易得多,因为这样您只实现了一个方法。如果您坚持使用
MouseListener
,我强烈建议扩展
MouseAdapter
,这样您只需覆盖您关心的方法。

错误消息清楚地解释了问题。方法
addActionListener(ActionListener)
ActionListener
实例作为其参数。您正在传入一个
MouseListener
实例。如果要传入
MouseListener
,则需要使用
addMouseListener(MouseListener)

您也不需要传入JFrame实例。在我脑海中,可能无法编译,请仔细检查自己:

@Override
public void mousePressed(final MouseEvent e) {
    final Component source = e.getComponent();
    final JFrame frame = (JFrame) SwingUtilities.getRoot(source);
    frame.dispose();
}

当然,添加一个
ActionListener
比添加一个
MouseListener
要容易得多,因为这样您只实现了一个方法。如果您坚持使用
MouseListener
,我强烈建议扩展
MouseAdapter
,这样您只需覆盖您关心的方法。

从@Eric Stein继续

例如,如果使用匿名内部类,这可能比为其创建一个完整的另一个类要简单得多:

btnClose.addMouseListener(new MouseListener() {
    public void mouseClicked(MouseEvent me) {
         t.setVisible(false);
         t.dispose(); // If you want.
    }
    public void mouseEntered(MouseEvent me) {} // Other required impls for MouseListener
    public void mouseExited(MouseEvent me) {}
    public void mousePressed(MouseEvent me) {}
    public void mouseReleased(MouseEvent me) {}
});

续自@Eric Stein

例如,如果使用匿名内部类,这可能比为其创建一个完整的另一个类要简单得多:

btnClose.addMouseListener(new MouseListener() {
    public void mouseClicked(MouseEvent me) {
         t.setVisible(false);
         t.dispose(); // If you want.
    }
    public void mouseEntered(MouseEvent me) {} // Other required impls for MouseListener
    public void mouseExited(MouseEvent me) {}
    public void mousePressed(MouseEvent me) {}
    public void mouseReleased(MouseEvent me) {}
});

续自@Eric Stein

例如,如果使用匿名内部类,这可能比为其创建一个完整的另一个类要简单得多:

btnClose.addMouseListener(new MouseListener() {
    public void mouseClicked(MouseEvent me) {
         t.setVisible(false);
         t.dispose(); // If you want.
    }
    public void mouseEntered(MouseEvent me) {} // Other required impls for MouseListener
    public void mouseExited(MouseEvent me) {}
    public void mousePressed(MouseEvent me) {}
    public void mouseReleased(MouseEvent me) {}
});

续自@Eric Stein

例如,如果使用匿名内部类,这可能比为其创建一个完整的另一个类要简单得多:

btnClose.addMouseListener(new MouseListener() {
    public void mouseClicked(MouseEvent me) {
         t.setVisible(false);
         t.dispose(); // If you want.
    }
    public void mouseEntered(MouseEvent me) {} // Other required impls for MouseListener
    public void mouseExited(MouseEvent me) {}
    public void mousePressed(MouseEvent me) {}
    public void mouseReleased(MouseEvent me) {}
});

我知道它将以这种方式工作,但如果我想制作一个通用的鼠标或动作侦听器类来用于表单中的所有关闭按钮,该怎么办?这意味着我必须以某种方式将表单的实例传递给新类,否则它将不知道我要关闭哪个类。我知道这种方法比较难,而另一种方法很容易实现。我知道它可以这样工作,但是如果我想让一个通用的鼠标或动作侦听器类用于表单中的所有关闭按钮,该怎么办?这意味着我必须以某种方式将表单的实例传递给新类,否则它将不知道我要关闭哪个类。我知道这种方法比较难,而另一种方法很容易实现。我知道它可以这样工作,但是如果我想让一个通用的鼠标或动作侦听器类用于表单中的所有关闭按钮,该怎么办?这意味着我必须以某种方式将表单的实例传递给新类,否则它将不知道我要关闭哪个类。我知道这种方法比较难,而另一种方法很容易实现。我知道它可以这样工作,但是如果我想让一个通用的鼠标或动作侦听器类用于表单中的所有关闭按钮,该怎么办?这意味着我必须以某种方式将表单的实例传递给新类,否则它将不知道我要关闭哪个类。我知道这条路更难,其他的