如下代码给一个表格(JTable)注册行双击事件,请问如何写得更加简单、可读?
//注册表格事件
table.addMouseListener(new MouseListener() {
//鼠标双击事件
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
.....//处理事件
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
高洛峰2017-04-17 13:12:11
J2SE裡面的許多GUI的Listener介面都有Adapter實作類,透過對Adapter的匿名類別可以免去實現不必要方法的麻煩。
例如你的這個程式碼可以寫成:
java
//注册表格事件 table.addMouseListener(new MouseAdapter() { //鼠标双击事件 @Override // 不确定是否需要@Override, U try public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { .....//处理事件 } } });
解釋:xxListener屬於接口,它定義了很多事件調用方法,如果你的類別實現xxListener的話必須將它定義的這些事件方法都實現,不管你需不需要的事件統統得實現,至少得實現成空方法(介面就是這麼任性)。而xxAdapter屬於類,它實現了xxListener接口,只不過它的所有方法都做成了空方法,你從xxAdapter類繼承出來的類就只需要重寫一下你所需要的事件方法就行了,其它事件發生的話就自動呼叫xxAdapter的空方法了。
參考 http://www.766.com/doc/java/awt/event/MouseAdapter.html