javaswingtable做一个树形工单表代码
时间: 2023-07-16 09:15:29 浏览: 45
以下是一个简单的树形工单表的 Java Swing 实现代码示例:
```java
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import java.awt.*;
public class WorkOrderTable extends JFrame {
private JTree tree;
private DefaultMutableTreeNode root;
public WorkOrderTable() {
setTitle("工单表");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建根节点
root = new DefaultMutableTreeNode("所有工单");
// 添加子节点
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("工单1");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("工单2");
DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("工单3");
root.add(node1);
root.add(node2);
root.add(node3);
DefaultMutableTreeNode node11 = new DefaultMutableTreeNode("任务1");
DefaultMutableTreeNode node12 = new DefaultMutableTreeNode("任务2");
node1.add(node11);
node1.add(node12);
DefaultMutableTreeNode node21 = new DefaultMutableTreeNode("任务1");
node2.add(node21);
DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("任务1");
node3.add(node31);
// 创建树
tree = new JTree(root);
// 设置树的样式
tree.setRootVisible(false);
tree.setShowsRootHandles(true);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
// 创建滚动面板
JScrollPane scrollPane = new JScrollPane(tree);
// 添加滚动面板到窗口
getContentPane().add(scrollPane, BorderLayout.CENTER);
// 添加按钮
JButton addButton = new JButton("添加工单");
addButton.addActionListener(e -> addWorkOrder());
getContentPane().add(addButton, BorderLayout.NORTH);
// 显示窗口
setSize(400, 300);
setVisible(true);
}
private void addWorkOrder() {
// 获取选中的节点
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
// 如果没有选中节点,则添加到根节点下
if (selectedNode == null) {
DefaultMutableTreeNode newWorkOrder = new DefaultMutableTreeNode("新工单");
root.add(newWorkOrder);
((DefaultTreeModel) tree.getModel()).reload(root);
tree.expandPath(new TreePath(newWorkOrder.getPath()));
}
// 如果选中节点是工单,则添加到该工单下
else if (selectedNode.isLeaf() && selectedNode.getParent() != null) {
DefaultMutableTreeNode newTask = new DefaultMutableTreeNode("新任务");
selectedNode.getParent().add(newTask);
((DefaultTreeModel) tree.getModel()).reload(selectedNode.getParent());
tree.expandPath(new TreePath(newTask.getPath()));
}
// 如果选中节点是任务,则添加到该任务所在工单下
else if (selectedNode.getParent() != null) {
DefaultMutableTreeNode newTask = new DefaultMutableTreeNode("新任务");
selectedNode.add(newTask);
((DefaultTreeModel) tree.getModel()).reload(selectedNode);
tree.expandPath(new TreePath(newTask.getPath()));
}
}
public static void main(String[] args) {
new WorkOrderTable();
}
}
```
运行上述代码,将会显示一个简单的树形工单表界面,包含一个树形结构和一个添加工单按钮。点击添加工单按钮,可以添加新的工单和任务。具体添加规则如下:
- 如果没有选中节点,则添加到根节点下;
- 如果选中节点是工单,则添加到该工单下;
- 如果选中节点是任务,则添加到该任务所在工单下。
注意:由于本示例代码简单,没有进行数据持久化和数据验证等相关操作。在实际应用中,需要根据具体需求进行完善。