普通组件如何检测鼠标事件
How do normal components detect Mouse Events
比如JList
s如何得到MouseEvent
s?我应该如何创建自己的 Component
的 MouseListener
?
官方 JList
s、JButton
s、JCheckBox
es 和其他 swing
组件没有使用 MouseListener
s 是吗?他们使用什么,如果我正在制作一个,我应该使用什么? (可能有 accessibility
支持)
您的组件必须扩展 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 将尝试调度的内容。
官方组件使用普通监听器(MouseListerner、ComponentListener、FocusListener 等),但您不会立即看到它,因为它们都封装在 Look&Feel UI 类 中。例如。对于 JList,请查看 BasicListUI,您会找到合适的侦听器。
对于您的自定义组件,通常直接实现监听器就足够了。但是,如果您还想支持可插入的观感,您可能需要花费更多的时间并为每个观感分别提供 UI 实现,就像标准的 jre-components 所做的那样。
比如JList
s如何得到MouseEvent
s?我应该如何创建自己的 Component
的 MouseListener
?
官方 JList
s、JButton
s、JCheckBox
es 和其他 swing
组件没有使用 MouseListener
s 是吗?他们使用什么,如果我正在制作一个,我应该使用什么? (可能有 accessibility
支持)
您的组件必须扩展 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 将尝试调度的内容。
官方组件使用普通监听器(MouseListerner、ComponentListener、FocusListener 等),但您不会立即看到它,因为它们都封装在 Look&Feel UI 类 中。例如。对于 JList,请查看 BasicListUI,您会找到合适的侦听器。
对于您的自定义组件,通常直接实现监听器就足够了。但是,如果您还想支持可插入的观感,您可能需要花费更多的时间并为每个观感分别提供 UI 实现,就像标准的 jre-components 所做的那样。