Ich habe zwei JTrees mit einigen falschen Daten drin, was ich versuche zu tun ist in der Lage zu sein, jeden 'Job' (15663-1, 15663-2, etc) zu machen und einen Knoten für jeden zu erstellen, mit einem Knoten für jedes Teil darunter und die Komponenten an jedem Teil darunter. In zwei Bäumen, wie folgt aus:Wie implementiere ich intelligentes Drag & Drop von einem JTree zum anderen?
+------------------------------+------------------------------+
| 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] |
+------------------------------+------------------------------+
Damit angenommen ich zwei Schrauben in der Abdeckung in Job A haben in den ‚Teile verschifft werden‘ jtree und ich habe nichts in Joba in den Versandkarton, Wenn ich die Schrauben auf die Transportbox ziehe, sollte sie einen Eintrag für JobA machen, einen Eintrag für Teil A machen und einen Eintrag für die Komponente machen, dann möchte ich die Menge für diese Komponente eingeben und diese Menge von der Menge subtrahieren Teile werden versandt.
Also wenn ich einen Job namens 1553-4 habe und er hat eine Abdeckung mit vier Schrauben und ich ziehe die Schrauben in die Versandbox, dann sollte es einen Eintrag in der Versandbox, die sagt, "x Schrauben" dann Aufforderung Damit der Benutzer die Anzahl der Schrauben eingeben kann, die er gerade verpackt hat, sollte der jtree, wenn er zwei Schrauben verpackt, die 2 Schrauben ändern, die für diesen Auftrag noch vorhanden sind.
Ich habe eine Reihe von verschiedenen Drag & Drop-Tutorials gelesen und ich habe einige Beispiele, aber ich kann es einfach nicht bekommen. Jeder Rat oder jede Hilfe wäre willkommen.
Ich weiß, dass ich einen TranferHandler implementieren muss, aber ich bin mir nicht sicher, wie genau, es scheint zu viel Schnittstelle 'Magie' los zu sein und ich verstehe es wirklich nicht.
Dies ist, was ich habe, ich machen Knoten und so verstehen, hier ist das, was ich habe:
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;
}
}
ich für einen kurzen Drag nur freu und in eine JTree Beispiel des Ziehens fallen und ziehe aus ein JTree.
Dies ist eine großartige Erklärung. Ich weiß, dass ich TransferHandler erweitern muss, aber muss ich den DataFlavor erweitern? Also muss ich den Transfer-Handler auf meiner Quellenliste erweitern und ihm mitteilen, was zu tun ist, um ihn in eine übertragbare Version zu packen (eine Klasse, die ein Objekt besitzt und übertragbar erweitert) und dann einen zweiten Transfer-Handler für das Ziel schreibt (außer natürlich, der erste Transfer-Handler weiß beides zu tun? Wo kommen die Dataflavors her? – davidahines
Der DataFlavor ist nur eine Möglichkeit anzugeben, welche Art von Daten im "Übertragbaren" (für den Absender) verfügbar ist und wie der Empfänger eine bestimmte Art von Daten anfordert. Stellen Sie sich das wie eine Art Etikett vor wie in einem Bibliotheksbuch, wo Sie sagen können "Gib mir das Mystery Buch" vs "Gib mir das romantische Zeug" – Robin
Danke, ich werde diese Tutorials ausprobieren. – davidahines