gpt4 book ai didi

java - 将 MouseListener 与 JTree 一起使用

转载 作者:行者123 更新时间:2023-11-30 09:30:06 24 4
gpt4 key购买 nike

我正在使用 MouseListener 检测对 JTree 项的双击。 JTree 位于 JScrollPane 中。当我检测到双击(一个 MouseEvent)时,我从 JTree 获取点击位置的路径。大多数情况下,这工作正常。

现在,如果我双击带有子节点的(折叠的)节点,该节点会展开,因此滚动 Pane 会向下滚动。当我尝试从点击位置获取树路径时,JTree 查看当前(滚动的) View 并返回错误的项目,因为点击位置指的是前一个 View (未滚动)。

有没有人知道如何解决这个问题?下面,我将附上一个例子来说明这个问题。


package test;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class TestMain extends JDialog implements MouseListener {

protected final JTree tree;

public TestMain() {
tree = new JTree(getRootNode());
tree.addMouseListener(this);

JScrollPane pane = new JScrollPane(tree);
pane.setPreferredSize(new Dimension(250, 300));

getContentPane().add(pane, BorderLayout.CENTER);
pack();
}

private TreeNode getRootNode() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");

for (int i = 0; i < 10; i++) {
root.add(new DefaultMutableTreeNode("Node " + i));
}

DefaultMutableTreeNode sub = new DefaultMutableTreeNode("Sub");
root.add(sub);

for (int i = 0; i < 10; i++) {
sub.add(new DefaultMutableTreeNode("Sub " + i));
}

return root;
}

@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
TreePath path = tree.getPathForLocation(e.getX(), e.getY());
if (path != null) {
System.out.println(path.getLastPathComponent().toString());
}
}
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

public static void main(String[] args) {
JDialog dialog = new TestMain();
dialog.setVisible(true);
}
}

最佳答案

我建议您使用 JTree.getSelectionPath().getLastPathComponent(),因为它不会在滚动时改变。

关于java - 将 MouseListener 与 JTree 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13418971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com