JList MouseMoved 和 MousePressed
我扩展了 JList
以提供两个独立的功能:项目的 toolTipText 和右键单击选项。两者都是单独工作的,但是当我尝试一起使用它们时, MouseMoved
事件无法被识别?以下是我的新侦听器方法的核心内容。我应该如何谈判这些不同的事件?
public class JListTT extends javax.swing.JList {
public JListTT() {
super();
addMouseListener(new ttListener());
...
class ttListener extends MouseAdapter {
public void mouseMoved(MouseEvent e) {
String nodeID = bldItemNodeID();
theList.setToolTipText(nodeID);
}
public void mousePressed(MouseEvent ev) {check(ev); }
public void mouseReleased(MouseEvent ev) {check(ev); }
public void mouseClicked(MouseEvent ev) {check(ev); }
public void check(MouseEvent ev) {
if (ev.isPopupTrigger()) {
theList.setSelectedIndex(theList.locationToIndex(ev.getPoint()));
menu.show(theList, ev.getX(), ev.getY());
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您将 ttListener 对象添加为 MouseListener,但我没有看到您将 ttListener 对象添加为 MouseMotionListener。例如:
You add the ttListener object as a MouseListener, but I don't see you adding the ttListener object as a MouseMotionListener. For example:
我自己没有对此进行测试,但查看
JList
的 javadoc 工具提示功能是开箱即用的。 JList#getTooltipText 明确指出因此,如果您的
ListCellRenderer
在getListCellRendererComponent
方法中返回一个Component
,该方法具有 工具提示 它将由JList
显示,无需倾听者的需要。I did not test this myself, but looking at the javadoc of
JList
the tooltip functionality is available out of the box. The javadoc of JList#getTooltipText clearly statesSo if your
ListCellRenderer
returns aComponent
in thegetListCellRendererComponent
method which has a tooltip it will be displayed by theJList
without the need of a listener.不一定需要像自定义鼠标/motionListener这样的低级方法:
“不一定”,因为您似乎依赖于右键单击时选择的单元格。如果是这样,您仍然需要一个 MouseListener 来触发选择(经过十年的争论,Swing 不需要 - 这在当前的本机应用程序中似乎很不寻常;-)
there's not necessarily a need for a low-level approach as a custom mouse-/motionListener:
"not necessarily" because you seem to rely on the cell being selected on right click. If so, you would still need a MouseListener to trigger the selection (after decade long debates, Swing doesn't - which seems to be unusual in current native apps ;-)
您可以通过使用 mouseDragged 来实现
You can achieve it by using mouseDragged