Tôi gặp sự cố khi mở rộng các nút JTree. Tôi bắt đầu khi sử dụng chọn một nút tất cả mọi thứ nhưng đường dẫn đến nút đã chọn và chính nút đã chọn sẽ bị thu gọn. Tôi đã cố gắng sử dụngMở rộng đường dẫn JTree cụ thể
tree.collapsePath(new TreePath(tree.getModel().getRoot()));
tree.expandPath(new TreePath(e111.getPath()));
một cái gì đó như thế này nhưng nó dường như không có hiệu lực và tôi thực sự không có ý tưởng làm thế nào tôi có thể làm điều này
Sau đây là cách cây của tôi trông:
http://img220.imageshack.us/img220/3450/jtreepng.png
Nếu tôi nhấp 1.1.1, tôi muốn mọi thứ khác bị thu gọn nhưng nút 1.1.1 và các phần tử từ đường dẫn đến nó.
Dưới đây là các ứng dụng tôi đã tạo:
public class SelectableTree extends JFrame implements TreeSelectionListener {
public static void main(String[] args) {
new SelectableTree();
}
DefaultMutableTreeNode root;
DefaultMutableTreeNode e1;
DefaultMutableTreeNode e2;
DefaultMutableTreeNode e3;
DefaultMutableTreeNode e11;
DefaultMutableTreeNode e22;
DefaultMutableTreeNode e33;
DefaultMutableTreeNode e111;
DefaultMutableTreeNode e222;
DefaultMutableTreeNode e333;
DefaultMutableTreeNode aChild;
private JTree tree;
private JTextField currentSelectionField;
public SelectableTree() {
super("JTree Selections");
WindowUtilities.setNativeLookAndFeel();
addWindowListener(new ExitListener());
Container content = getContentPane();
root = new DefaultMutableTreeNode("Root");
e1 = new DefaultMutableTreeNode("1");
e2 = new DefaultMutableTreeNode("2");
e3 = new DefaultMutableTreeNode("3");
e11 = new DefaultMutableTreeNode("1.1");
e22 = new DefaultMutableTreeNode("2.2");
e33 = new DefaultMutableTreeNode("3.3");
e111 = new DefaultMutableTreeNode("1.1.1");
e222 = new DefaultMutableTreeNode("2.2.2");
e333 = new DefaultMutableTreeNode("3.3.3");
root.add(e1);
root.add(e2);
root.add(e3);
e1.add(e11);
e2.add(e22);
e3.add(e33);
e11.add(e111);
e22.add(e222);
e33.add(e333);
tree = new JTree(root);
tree.addTreeSelectionListener(this);
content.add(new JScrollPane(tree), BorderLayout.CENTER);
currentSelectionField = new JTextField("Current Selection: NONE");
content.add(currentSelectionField, BorderLayout.SOUTH);
setSize(250, 275);
setVisible(true);
}
public void valueChanged(TreeSelectionEvent event) {
tree.clearSelection();
tree.collapsePath(new TreePath(tree.getModel().getRoot()));
tree.expandPath(new TreePath(e111.getPath()));
}
Edit: lạ đủ các tree.collapsePath
công trình tốt, có vẻ như tree.expandPath(new TreePath(e111.getPath()));
là vấn đề
Vâng, tôi đã không nhận thấy rằng, nhưng thậm chí sau đó nếu tôi làm tree.expandPath (TreePath mới (E11 .getPath())); hiệu quả là tôi thấy cây được mở rộng hoàn toàn. Điều này thật lạ vì lệnh chính xác giống như khi tôi đặt nó trong hàm tạo. – Ivo
@Robin là đúng; ví dụ của bạn cũng cần thêm ['invokeLater()'] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html), được hiển thị [ở đây] (http://stackoverflow.com/a/11260104/230513). – trashgod