普通组件如何检测鼠标事件

时间:2016-08-29 11:19:36

标签: java swing accessibility

例如,JList如何获得MouseEvent?我该如何创建自己的Component MouseListener

官方JListJButtonJCheckBox和其他swing组件未使用MouseListener是吗?他们使用了什么,如果我正在制作一个,我应该使用什么? (可能有accessibility支持)

2 个答案:

答案 0 :(得分:2)

官方组件使用普通的侦听器(MouseListerner,ComponentListener,FocusListener等)但你没有立即看到它,因为它全部封装在Look& Feel UI类中。例如。对于JList看看BasicListUI,你会找到合适的监听器。

对于自定义组件,通常足以直接实现侦听器。但是,如果您还想支持可插拔外观,则可能需要更长的时间并为每个外观提供单独的UI实现,就像标准的jre组件一样。

答案 1 :(得分:1)

您的组件必须扩展JComponent并实施MouseListener

这些是您必须覆盖的方法:

@Override
public void mouseClicked(MouseEvent e) {
    throw new UnsupportedOperationException();
}

@Override
public void mousePressed(MouseEvent e) {
    throw new UnsupportedOperationException();
}

@Override
public void mouseReleased(MouseEvent e) {
    throw new UnsupportedOperationException();
}

@Override
public void mouseEntered(MouseEvent e) {
    throw new UnsupportedOperationException();
}

@Override
public void mouseExited(MouseEvent e) {
    throw new UnsupportedOperationException();
}

从可访问性的角度来看,您必须实现的方法取决于元素在可访问性API中公开的角色。对于按钮,您必须实现mouseClicked处理程序,因为这是辅助功能API将尝试分派的内容。