У меня есть два JTrees с некоторыми фиктивными данными, что я хочу сделать, так это иметь возможность взять каждое «Задание» (15663-1, 15663-2 , и т. д.) и создайте узел для каждого, с узлом для каждой части под ним и компонентами, прикрепленными к каждой части под ним. В двух деревьях, например так:
+------------------------------+------------------------------+
| PARTS TO BE SHIPPED | SHIPPING BOX |
+------------------------------+------------------------------+
|[JOB] |[JOB] |
|+------[part] |+------[part] |
| +------[component] | +------[component] |
| +------[component] | +------[component] |
|+------[part] |+------[part] |
| +------[component] | +------[component] |
|[JOB] |[JOB] |
|+------[part] |+------[part] |
| +------[component] | +------[component] |
| +------[component] | +------[component] |
|+------[part] |+------[part] |
| +------[component] | +------[component] |
+------------------------------+------------------------------+
Итак, предположим, что у меня есть два винта в крышке в задании A в дереве j "детали, подлежащие отправке", и у меня нет ничего в задании A в упаковочной коробке, когда я перетаскиваю винты к упаковочной коробке, он должен сделать запись для jobA, сделать запись для части A и сделать запись для компонента, затем я хочу, чтобы он запрашивал количество для этого компонента и вычитал это количество из частей, которые должны быть отправлены дерево.
Таким образом, если у меня есть работа под названием 1553-4, и у нее есть крышка с четырьмя винтами, и я перетаскиваю винты в транспортировочную коробку, тогда в транспортной коробке должна быть запись, которая говорит «x винты», а затем запрашивается пользователь должен ввести количество винтов, которые они только что упаковали, если они упаковывают два винта, тогда jtree должно измениться, чтобы отразить 2 винта, оставшихся для этой работы.
Я прочитал кучу различных руководств по перетаскиванию и у меня есть несколько примеров, но я просто не могу их понять. Любые советы или помощь будут оценены.
Я знаю, что мне нужно реализовать TranferHandler, но я не уверен, как именно, кажется, что происходит слишком много «волшебства» интерфейса, и я действительно не понимаю этого.
Вот что у меня есть, я понимаю создание узлов и тому подобное, вот что у меня есть:
package com.protocase.examples;
import java.awt.Dimension;
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
/**
* @author DavidH
*/
public class JTreeExample {
public static void main(String[] args) {
addTreesAndDisplay();
}
private static void addTreesAndDisplay() throws HeadlessException {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTree tree = new JTree(getTreeModel());
tree.setDragEnabled(true);
tree.setPreferredSize(new Dimension(200,400));
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(tree);
panel.add(scroll);
JTree secondTree = new JTree(getTreeModel());
secondTree.setPreferredSize(new Dimension(200,400));
secondTree.setDragEnabled(true);
JScrollPane secondScroll = new JScrollPane();
secondScroll.setViewportView(secondTree);
panel.add(secondScroll);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static DefaultTreeModel getTreeModel() {
MutableTreeNode root = new DefaultMutableTreeNode("15663-1");
DefaultMutableTreeNode cover = new DefaultMutableTreeNode("Cover");
DefaultMutableTreeNode base = new DefaultMutableTreeNode("Base");
root.insert(cover, 0);
root.insert(base, 0);
cover.insert(new DefaultMutableTreeNode("2x PEMS"), 0);
cover.insert(new DefaultMutableTreeNode("2x SCREWS"), 0);
base.insert(new DefaultMutableTreeNode("4x SCREWS"), 0);
base.insert(new DefaultMutableTreeNode("4x HANDLES"), 0);
DefaultTreeModel model = new DefaultTreeModel(root);
return model;
}
}
Я просто ищу краткий пример перетаскивания в JTree и перетаскивания из JTree.