2014-06-14 3 views
0

저는 Java를 처음 사용하고 다음과 같은 것을 얻고 싶습니다.클래스의 Java MouseListener

나는 다양한 comboboxes이 있습니다. 각 combobox에는 콤보 상자의 내용을 지워야하는 버튼이 있습니다. 명확한 buton은 내가 만든 일반 ClearComboBoxButton 클래스에서 만들어집니다. 이 ClearComboBoxButton 클래스의 일부로 combobox을 지우는 MouseListener을 추가하고 싶습니다.

버튼을 만들면 연결된 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; 
} 
} 
+0

버튼을 마우스 수신기로 추가해야합니다 ('this.addMouseListener (this)'). – helderdarocha

답변

1

귀하의 이벤트 소스 (버튼) 마우스 이벤트를 받기 위해 레지스터 이벤트 핸들러에 필요합니다. 당신의 버튼의 MouseListener를 구현하기 때문에, 당신은 당신의 청취자로서 this을 등록 할 수 있습니다 : 리스너가 될하기 위해

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

둘째, 모든의

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

첫째, mouseClicked() 방법은 아무것도하지 않습니다 불려가, 마우스 이벤트를 발생시키는 컴퍼넌트에 추가해, 청취하고 싶은 컴퍼넌트에 추가 할 필요가 있습니다. 당신의 버튼 자체에 의해 해고 사건 알고 싶어하기 때문에, 당신은

this.addMouseListener(this); 

이 필요하지만이 MouseListener를 사용해서는 안 버튼 클릭을 듣고. 이를 위해서는 ActionListener을 사용해야합니다. 첫째, 그것이 더 간단하고 의미 있고 정확합니다. 둘째, 많은 사용자가 키보드를 사용하여 버튼을 클릭하기 때문입니다.

저는 개인적으로 JXButton을 확장하는 것을 피하고 대신 컴포지션을 사용합니다. 그리고 클래스를 구현하도록 만드는 대신 익명 클래스를 리스너로 사용합니다.