我是 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/