类中的 Java MouseListener

标签 java eclipse swing mouselistener swingx

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

我有各种组合框。对于每个组合框,我都有一个按钮可以清除组合框的内容。清除按钮是从我创建的通用 ClearComboBoxButton 类创建的。作为此 ClearComboBoxButton 类的一部分,我想添加一个 MouseListener 来清除与其关联的组合框

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

这就是我现在所拥有的。 (我的按钮已成功创建,但监听器似乎没有触发)

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

最佳答案

首先,mouseClicked() 方法不执行任何操作:

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

其次,为了调用您的监听器,应将其添加到触发鼠标事件并且您想要监听的组件中。由于您的按钮想要了解自身触发的事件,因此您需要

this.addMouseListener(this);

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

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

关于类中的 Java MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222618/

相关文章:

java - Spring-Boot/H2 将数据库快照写入文件系统

java - IntelliJ IDEA找不到Tomcat Lib目录

java - 如何使用主键查找数据库中的行号(Android SQLite Eclipse Java)

java.lang.NoClassDefFoundError : org/json/simple/parser/ParseException with eclipse and spring 错误

Java JTable AttributiveCellTableModel 添加行

Java JFrame 问题

Netbeans 10(带有 Maven)中的 JavaFX 11 没有 Sources/Javadocs

java - Subclipse 问题 : running . java 文件作为 Java 应用程序

swing - 设置 ContentPane 的大小(在 JFrame 内部)

java - Java 接口(interface)中的静态方法