私はJavaでツリーを構築したい。 insert delete updateなどの操作それについてどうやって行くの?私は私はあなたが欲しいものツリー内の任意のノードを追加するJavaの
0
A
答えて
1
が解決
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class MyTree extends JFrame{
private JTree tree;
private DefaultTreeModel model;
private DefaultMutableTreeNode rootNode;
public MyTree()
{
DefaultMutableTreeNode philosophersNode = getTree();
model = new DefaultTreeModel(philosophersNode);
tree = new JTree(model);
JButton addButton = new JButton("Add ");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
addNode();
}
});
JButton removeButton = new JButton("Delete");
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
removeSelectedNode();
}
});
JPanel inputPanel = new JPanel();
inputPanel.add(addButton);
inputPanel.add(removeButton);
Container container = getContentPane();
container.add(new JScrollPane(tree), BorderLayout.CENTER);
container.add(inputPanel, BorderLayout.NORTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 500);
setVisible(true);
}
private DefaultMutableTreeNode getSelectedNode() {
return (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
}
private DefaultMutableTreeNode getTree() {
rootNode = new DefaultMutableTreeNode("Root");
return rootNode;
}
private void removeSelectedNode() {
DefaultMutableTreeNode selectedNode = getSelectedNode();
if (selectedNode != null){
if(selectedNode.toString()=="Root")
{
JOptionPane.showMessageDialog(MyTree.this, "Cannot delete root element", "Error",
JOptionPane.ERROR_MESSAGE);
}else{
model.removeNodeFromParent(selectedNode);
}
}
}
private void addNode() {
DefaultMutableTreeNode parent = getSelectedNode();
if (parent == null) {
JOptionPane.showMessageDialog(MyTree.this, "Select an area.", "Error",
JOptionPane.ERROR_MESSAGE);
return;
}
String name = JOptionPane.showInputDialog(MyTree.this, "Enter Name:");
model.insertNodeInto(new DefaultMutableTreeNode(name), parent, parent.getChildCount());
}
public static void main(String args[]) {
new MyTree();
}
}
1
全くわからない}
import java.util.ArrayList;
public class Tree {
private Node root;
public Tree(String rootData)
{
root=new Node();
root.data=rootData;
root.children=new ArrayList<Node>();
}
public void addChild(String name)
{
}
}
import java.util.*;
class Node {
String data;
Node parent;
List<Node> children;
public Node()
{
data=null;
children=null;
parent=null;
}
public Node(String name)
{
Node n=new Node(name);
n.data=name;
n.children=new ArrayList<Node>();
}
次私が実装した
ユーザー入力に基づいて、子供たちを追加したい、バイナリツリーをたくありません。おそらく、JTreeのDefaultTreeModel実装やTreeModelインタフェースを調べたいと思うかもしれません。ホイールを再構築する必要はありません。多くの場合、ホイールは明らかに三角形に見えます。とにかく
、このビットを助けるかもしれない:ここでは
import java.util.ArrayList;
public class Tree {
private Node root;
public Tree(String rootData)
{
root=new Node();
root.data=rootData;
root.children=new ArrayList<Node>();
}
public List<Node> getPathToNode(Node node) {
Node currentNode = node;
List<Node> reversePath = new ArrayList<Node>();
reversePath.add(node);
while (!(this.root.equals(currentNode)) {
currentNode = currentNode.getParentNode();
reversePath.add(currentNode);
}
Collections.reverse(reversePath); // now the list is root -> node
return reversePath;
}
}
import java.util.*;
class Node {
String data;
Node parent;
List<Node> children;
/* I would remove this constructor or at least initialize the field to non-null defaults. This is bloody dangerous. */
public Node()
{
data=null;
children=null;
parent=null;
}
public Node(String name)
{
Node n=new Node(name);
n.data=name;
n.children=new ArrayList<Node>();
}
public void addChild(String name) {
this.addChild(new Node(name));
}
public void addChild(Node child) {
this.children.add(child);
}
public void removeChild(Node child) {
this.children.remove(child);
}
public void removeChild(String name) {
this.removeChild(this.getChild(name));
}
public Node getChild(int childIndex) {
return this.children.get(childIndex);
}
public Node getChild(String childName) {
for (Node child : this.children) {
if (child.getName().equals(childName)) { return child; }
}
return null;
}
public Node getParentNode() {
return this.parent;
}
}
+0
一般的なツリー次のリンクhttp://sujitpal.blogspot.com/2006/05/java-data-structure-generic-tree.html助けてくれることを願って – nyfer
+0
いいですね。それを楽しみましょう。 –
関連する問題
- 1. 任意の数の子を持つノードのツリー内のノードを見つける
- 2. 任意のノードでツリーを取得する方法(SQL)
- 3. 任意のツリー内でn個の最大ノードを見つける
- 4. 任意のツリー内の特定の要素を見つける
- 5. 任意のJava beanにプロパティを追加します
- 6. ノードをD3ツリーに追加するv4
- 7. 式ツリーにノード/プロパティを追加する
- 8. レコーダーに任意の情報を追加
- 9. パーティクルプロットされたツリーの内側ノードの円にバープロットを追加する
- 10. 追加2セット[任意]
- 11. java alogrithm:ツリー内の任意のノードから特殊条件を満たす前/次の葉ノードを見つける
- 12. 任意のツリーをRツリーに変換できますか?
- 13. ツリー内の任意のノードの階層を再帰的に生成しますか?
- 14. ノードをn-aryツリーに追加するときのセグメンテーションフォールト
- 15. ipythonノートブックのmatplotlibプロットに任意の行を追加する
- 16. cのノード内のツリー
- 17. Javaツリー内のすべてのノードを選択
- 18. のJava:任意のサイズ
- 19. xnaプログラムに任意の拡張ファイルを追加するには?
- 20. Javascript:任意の日付に日を追加する
- 21. 任意のデータをpackage.jsonに追加する方法は?
- 22. Mac OS X:任意のファイルにカスタムメタデータフィールドを追加する
- 23. 任意のメタデータをFormControlに追加する
- 24. 任意のアクティビティにサブビューを追加するアンドロイド
- 25. 任意のサービス参照にグローバルにIClientMessageInspectorを追加する
- 26. ツリー内のノードのすべての親ノードを見つける
- 27. jquery:特定のノードを除く任意のノードのコールバックをクリック
- 28. C#WPFツリー内のノード内のボタン
- 29. Javaスクリプトを使用して任意のチャートをApex 5に追加
- 30. ツリー内のノード/リーフにアクセスする
がどの部分あなたが持つ難しさを持っているのですか? – oksayt
ユーザー入力時にノードを作成します。例えば、ユーザがホームディレクトリおよび音楽、文書および映画をサブディレクトリとして作成することを望む場合 – nyfer
ユーザ入力を言うときには、より具体的にする必要があります。彼らはコマンドラインと対話してテキストを入力していますか?もしそうなら、どうですか?いくつかの入力例を示し、結果がどうなるかを説明する。また、実際の問題点を特定する必要があります。入力を解析していますか?実際にそれをツリーに追加しますか?質問を編集してこの情報を追加してください。 – Bryan