У меня есть два дерева JT с некоторыми фиктивными данными, и я хочу, чтобы я мог взять каждое «задание» (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 в дереве «детали для отправки», и у меня нет ничего в задании A в транспортной коробке, когда я перетаскиваю винты в транспортную коробку, это должен сделать запись для задания A, сделать запись для части A и сделать запись для компонента, затем я хочу, чтобы он запрашивал количество для этого компонента и вычитал это количество из частей, которые должны быть отправлены jtree.
Итак, если у меня есть задание 1553-4, у которого есть крышка с четырьмя винтами, и я перетаскиваю винты в транспортировочную коробку, тогда в поле доставки должно быть указано «х винтов», а затем запросить пользователь должен ввести количество винтов, которые он только что упаковал, если они упаковывают два винта, тогда 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.