已有101人关注
Java开发实战的【第25章 相片管理模块】
发表在Java图书答疑 2016-03-26
是否精华
版块置顶:
Java开发实战的【第25章 相片管理模块】实在是太难懂了,完全跟前面那些代码的书写风格不一样,写成【第20章 通讯录管理模块】那种形式还好一点啊,现在看起来一头雾水,偏偏里面的树组件的那种应用方式又是我现在需要学习的,能够麻烦重写一个吗?或者写个其他的,我想知道的是如何【[font color=#FF0000]通过点击树组件的某个树节点而显示相应的数据表格,添加数据到相应的树节点中[/font]】。

不知道为什么此贴刷新不出来,发了几次。
分享到:
精彩评论 1
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2016-03-29
沙发
目前我们只支持书本上的问题,对于出本之外的代码和需求我们不予解答。
如果你是想知道如何维护树的结构和如何获取选中的树节点,可以通过下面这个例子来了解一下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class ExampleFrame_05 extends JFrame {

private JTextField textField;

private DefaultTreeModel treeModel;

private JTree tree;

public static void main(String args[]) {
ExampleFrame_05 frame = new ExampleFrame_05();
frame.setVisible(true);
}

public ExampleFrame_05() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);

DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");

DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode("经理办公室");
root.add(nodeA);

DefaultMutableTreeNode nodeB = new DefaultMutableTreeNode("人事部");
root.add(nodeB);

DefaultMutableTreeNode nodeC = new DefaultMutableTreeNode("技术部");
root.add(nodeC);
nodeC.add(new DefaultMutableTreeNode("网络维护部"));
nodeC.add(new DefaultMutableTreeNode("应用开发部"));
treeModel = new DefaultTreeModel(root, true);

tree = new JTree(treeModel);
tree.setSelectionPath(new TreePath(root));
scrollPane.setViewportView(tree);

final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.SOUTH);

final JLabel label = new JLabel();
label.setText("名称:");
panel.add(label);

textField = new JTextField();
textField.setColumns(8);
textField.setText("测试");
panel.add(textField);

tree.addTreeSelectionListener(new TreeSelectionListener() { // 树选中节点时触发的监听
public void valueChanged(TreeSelectionEvent e) {
if (!tree.isSelectionEmpty()) {// 查看是否存在被选中的节点
// 获得所有被选中节点的路径
TreePath[] selectionPaths = tree.getSelectionPaths();
for (int i = 0; i < selectionPaths.length; i++) {
// 获得被选中节点的路径
TreePath treePath = selectionPaths[i];
// 以Object数组的形式返回该路径中所有节点的对象
Object[] path = treePath.getPath();
for (int j = 0; j < path.length; j++) {
DefaultMutableTreeNode node;// 获得节点
node = (DefaultMutableTreeNode) path[j];
String s = node.getUserObject()
+ (j == (path.length - 1) ? "" : "-->");
System.out.print(s);// 输出节点标签
}
System.out.println();
}
System.out.println();
}
}
});

final JButton addButton = new JButton("添加");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(textField.getText());// 创建欲添加节点
TreePath selectionPath = tree.getSelectionPath();// 获得选中的父节点路径
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();// 获得选中的父节点
treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount());// 插入节点到所有子节点之后
TreePath path = selectionPath.pathByAddingChild(node);// 获得新添加节点的路径
if (!tree.isVisible(path))
tree.makeVisible(path);// 如果该节点不可见则令其可见
}
});
panel.add(addButton);

final JButton updButton = new JButton("修改");
updButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获得选中的欲修改节点的路径
TreePath selectionPath = tree.getSelectionPath();
DefaultMutableTreeNode node = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();// 获得选中的欲修改节点
node.setUserObject(textField.getText());// 修改节点的用户标签
treeModel.nodeChanged(node);// 通知树模型该节点已经被修改
tree.setSelectionPath(selectionPath);// 选中被修改的节点
}
});
panel.add(updButton);

final JButton delButton = new JButton("删除");
delButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();// 获得选中的欲删除节点
// 查看欲删除的节点是否为根节点,根节点不允许删除
if (!node.isRoot()) {
DefaultMutableTreeNode nextSelectedNode = node.getNextSibling();// 获得下一个兄弟节点,以备选中
if (nextSelectedNode == null)// 查看是否存在兄弟节点
nextSelectedNode = (DefaultMutableTreeNode) node.getParent();// 如果不存在则选中其父节点
treeModel.removeNodeFromParent(node);// 删除节点
tree.setSelectionPath(new TreePath(nextSelectedNode.getPath()));// 选中节点
}
}
});
panel.add(delButton);
}
}
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照