【问题标题】:Java MouseListener in a Class类中的 Java MouseListener
【发布时间】:2014-06-14 17:46:33
【问题描述】:

我是 Java 新手,希望实现以下目标。

我有一个不同的comboboxes。对于每个combobox,我都有一个应该清除组合框内容的按钮。清除按钮是从我创建的通用 ClearComboBoxButton 类创建的。作为 ClearComboBoxButton 类的一部分,我想添加一个 MouseListener 来清除与之关联的 combobox。

当我创建按钮时,关联的combobox 作为参数传递。

这是我目前所拥有的。 (我的按钮创建成功,但listener 似乎没有触发)

public class ClearComboBoxButton extends JXButton implements MouseListener{
private JXComboBox cboComboBox;
private static final long serialVersionUID = 1L;
public ClearComboBoxButton(JXComboBox cboComboBox){
    super();        
    this.setCboComboBox(cboComboBox);
    setPreferredSize(new Dimension(20, 20));
    setMinimumSize(new Dimension(20,20));
    setMaximumSize(new Dimension(20, 20));
    setToolTipText("Clear");
    setIcon(new ImageIcon("C:\\Java\\icons\\cancel.png"));
}
public void mouseClicked(MouseEvent arg0, JXComboBox cboComboBox) { 
    System.out.println("Cleared");
    this.setCboComboBox(cboComboBox);
    cboComboBox.setSelectedIndex(-1);   
}
@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
@Override
public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub

}
public JXComboBox getCboComboBox() {
    return cboComboBox;
}
public void setCboComboBox(JXComboBox cboComboBox) {
    this.cboComboBox = cboComboBox;
}
}

【问题讨论】:

  • 您的按钮需要将自己添加为鼠标侦听器 (this.addMouseListener(this))。

标签: java eclipse swing mouselistener swingx


【解决方案1】:

首先,mouseClicked() 方法没有做任何事情:

@Override
public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub
}

其次,为了调用你的监听器,它应该被添加到触发鼠标事件的组件中,并且你想要监听。由于您的按钮想要知道​​自己触发的事件,因此您需要

this.addMouseListener(this);

但是你不应该使用MouseListener 来监听按钮点击。应该为此使用ActionListener。首先是因为它在语义上更简单、更正确。其次,因为许多用户使用他们的键盘来点击一个按钮。

我个人会避免扩展 JXButton,而是使用组合。而且我也会使用匿名类作为监听器,而不是让你的类实现它。

【讨论】:

    【解决方案2】:

    您的事件源(按钮)需要注册一个事件处理程序才能接收鼠标事件。由于您的 Button 实现了 MouseListener,因此您可以将 this 注册为您的侦听器:

    public ClearComboBoxButton(JXComboBox cboComboBox){
        super();        
        this.setCboComboBox(cboComboBox);
        setPreferredSize(new Dimension(20, 20));
        setMinimumSize(new Dimension(20,20));
        setMaximumSize(new Dimension(20, 20));
        setToolTipText("Clear");
        setIcon(new ImageIcon("C:\\Java\\icons\\cancel.png"));
    
        this.addMouseListener(this); // add this line
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多