我扩展了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());
}
}
}
答案 0 :(得分:4)
您将ttListener对象添加为MouseListener,但我没有看到您将ttListener对象添加为MouseMotionListener。例如:
ttListener myMouseadapter = new ttListener();
addMouseListener(myMouseadapter);
addMouseMotionListener(myMouseadapter);
答案 1 :(得分:2)
我自己没有对此进行测试,但是查看JList
的javadoc工具提示功能是开箱即用的。 JList#getTooltipText的javadoc明确指出
重写JComponent的getToolTipText方法以允许 如果渲染器有文本设置,则使用它的提示。
因此,如果您的ListCellRenderer
在Component
方法中返回getListCellRendererComponent
JList
,{{1}}将显示{{1}},而不需要监听器。
答案 2 :(得分:1)
作为自定义鼠标/ / motionListener,不一定需要低级方法:
“不一定”,因为您似乎依赖于右键单击选中的单元格。如果是这样,你仍然需要一个MouseListener来触发选择(经过长达十年的辩论,Swing没有 - 这在当前的原生应用程序中似乎不常见;-)
答案 3 :(得分:0)
您可以使用 mouseDragged
来实现它YourClass extends JPanel implements MouseListener{
......
@Override
public void mouseDragged(MouseEvent e) {
//code go here
}
}