import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame {
JTree tree = new JTree();
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
TreeSelectionModel selectionModel = tree.getSelectionModel();
JButton removeButton = new JButton("Remove selected node");
JButton addButton = new JButton("Add node");
public Test() {
Container contentPane = getContentPane();
selectionModel.setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
contentPane.add(new ControlPanel(), BorderLayout.NORTH);
contentPane.add(tree, BorderLayout.CENTER);
tree.addTreeSelectionListener(
new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreePath path = e.getNewLeadSelectionPath();
boolean nodesAreSelected = (path != null);
addButton.setEnabled(nodesAreSelected);
removeButton.setEnabled(nodesAreSelected);
}
});
model.addTreeModelListener(new TreeModelListener() {
public void treeNodesInserted(TreeModelEvent e) {
showInsertionOrRemoval(e, " added to ");
}
public void treeNodesRemoved(TreeModelEvent e) {
showInsertionOrRemoval(e, " removed from ");
}
private void showInsertionOrRemoval(TreeModelEvent e,
String s) {
Object[] parentPath = e.getPath();
int[] indexes = e.getChildIndices();
Object[] children = e.getChildren();
Object parent = parentPath[parentPath.length - 1];
JOptionPane.showMessageDialog(
Test.this,
"Node " + children[0].toString() + "" + s
+ parent.toString() + " at index " + indexes[0],
"Node Added or Removed",
JOptionPane.INFORMATION_MESSAGE);
}
public void treeNodesChanged(TreeModelEvent e) {
}
public void treeStructureChanged(TreeModelEvent e) {
}
});
}
class ControlPanel extends JPanel {
public ControlPanel() {
addButton.setEnabled(false);
removeButton.setEnabled(false);
add(addButton);
add(removeButton);
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath path =
selectionModel.getSelectionPath();
MutableTreeNode parent, node =
(MutableTreeNode) path.getLastPathComponent();
if (path.getPathCount() > 1)
parent = (MutableTreeNode) node.getParent();
else
parent = (MutableTreeNode) node;
int index = parent.getIndex(node) + 1;
String s = JOptionPane.showInputDialog(
Test.this,
"Enter a name for the new node:",
"New Tree Node",
JOptionPane.QUESTION_MESSAGE);
MutableTreeNode newNode =
new DefaultMutableTreeNode(s);
model.insertNodeInto(newNode, parent, index);
}
});
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath path =
selectionModel.getSelectionPath();
if (path.getPathCount() == 1) {
JOptionPane.showMessageDialog(ControlPanel.this,
"Can't remove root node!");
return;
}
MutableTreeNode node =
(MutableTreeNode) path.getLastPathComponent();
model.removeNodeFromParent(node);
}
});
}
}
public static void main(String args[]) {
Test t = new Test();
t.setSize(400, 300);
t.show();
}
}
分享到:
相关推荐
在例子中,使用了`FlowLayout`布局管理器将`JTree`添加到窗口中。 3. **节点的选中和信息获取**: JTree允许用户选择特定的节点。当用户选择节点时,可以通过监听`TreeSelectionListener`事件来获取选中的节点信息...
总结来说,这个例子展示了如何通过自定义数据结构(`MyHashtable`)来解决`JTree`节点顺序问题。`MyHashtable`通过维护一个额外的列表来记录键的插入顺序,从而确保`JTree`的构造函数在构建树形结构时能按照输入顺序...
在这个例子中,我们创建了一个简单的两层树,根节点下有两个子节点。通过`JFrame`显示`JTree`,可以看到层次化的数据结构。 除了基本的创建和显示,`JTree`还有许多高级功能,如展开/折叠节点、拖放操作、自定义...
这个例子创建了一个包含两个子节点的JTree,并将其放入滚动面板显示。 总之,JTree是Java Swing中一个强大的组件,它使得在图形用户界面中展示和操作树形数据变得简单直观。通过熟练掌握JTree的使用,开发者可以...
以下是一个简单的例子,展示了如何创建一个包含 "World" 作为根节点,并添加 "USA" 作为子节点的 JTree: ```java DefaultMutableTreeNode root = new DefaultMutableTreeNode("World"); DefaultMutableTreeNode ...
#### (五) JTree右键菜单实现编辑、添加、删除节点 **Test.java源代码**:示例代码展示了如何在JTree上添加右键菜单,并实现编辑、添加、删除等功能。 #### (六) 功能齐全的JTree例子 **TreeEditTest.java源代码*...
在这个例子中,没有给出具体的实现,但通常我们会在这里添加对`treeModel`的`nodeInserted`, `nodeRemoved`, `nodeChanged`等方法的处理逻辑。 6. **`GridLayout`**: `java.awt.GridLayout`是布局管理器之一,用于...
`addSiblingButton`、`addChildButton`和`deleteButton`都有对应的监听器,当用户点击这些按钮时,会触发相应的行为,如添加兄弟节点、添加子节点或删除节点。 7. **JFrame与窗口关闭**: `JFrame`是Java Swing中...
在这个特定的例子中,我们关注的是"checknode(树型)",这意味着它是在JTree的基础上增加了复选框功能,使得用户能够对树中的节点进行选择操作。下面我们将详细探讨这个主题。 首先,`CheckNodeTreeExample.java`...
- **`DefaultMutableTreeNode`**:这是Swing框架中用于表示树节点的核心类,支持动态添加和删除子节点。 - **`JTree`与`DefaultTreeModel`**:`JTree`是Swing提供的用于显示树结构的组件,而`DefaultTreeModel`是...
事件监听器如`TreeSelectionListener`可用于响应用户在树结构中选择节点时的交互。 2. **JCheckBoxDemo.java**:`JCheckBox`是Swing中的复选框组件,用于提供两种状态的选择:选中或未选中。此示例可能包括如何创建...
在这个例子中,我们创建了一个`MouseAdapter`子类,并重写了`mouseClicked`方法,以便在点击树节点时更新文本框`jtf`的内容。 ```java tree.addMouseListener(new MouseAdapter() { public void mouseClicked...
5. **TreeModel**: JTree的模型,负责处理数据的添加、删除和更改。默认情况下,可以使用DefaultTreeModel,通过传入根节点来初始化。 6. **事件监听**: JTree支持各种事件监听,如TreeSelectionListener,可以监听...
接着,我们可以实现树的添加、删除、查找等操作。例如,添加一个子节点的方法: ```java public void addChild(TreeNode child) { if (children == null) { children = new ArrayList(); } children.add(child)...
在这个例子中,它用于构建树形结构的数据模型。每个节点都可以包含任意对象,这里使用了自定义的`book` 类对象来存储书籍信息。 接下来,`JTree` 对象被创建并设置为刚才构建的数据模型。`JTree` 是一个可视化的...
它可以容纳任意类型的数据,并且支持添加、删除和修改子节点。 2. **DefaultTreeModel** 类: - `DefaultTreeModel` 是 `TreeModel` 接口的具体实现,它定义了树的数据结构。通过这个类,我们可以创建和管理树的根...
通过研究这个示例,你可以了解如何添加、删除节点,以及响应用户的点击事件。 `notepad` 示例则是一个简单的文本编辑器,它演示了如何利用Java的I/O流处理文件读写,以及如何结合Swing组件来构建一个功能完备的桌面...
3. **DynamicTreeTableModel.java**:动态树表模型,可能用于处理数据的动态更新,如添加、删除和修改节点。 4. **Bookmarks.java**:可能是一个示例类,展示了如何将书签数据结构与JTreeTable集成,提供了一种实际...
学习者将学习如何添加节点,以及如何处理用户的点击事件,这对于构建图形用户界面(GUI)的应用程序非常有用。 4. **Update1.java, Insert1.java, Delete.java**:这些文件可能与数据库操作相关,演示了如何使用...