实现JTree与JTable的联动,以及对JTable数据的增加与删除

        在作业中有遇到有关JTree与JTable的联动的问题,后来在网上查了好多,都写得不全的样子,所以就写了一个小程序以作巩固和供需要的人参考

一 实现功能

1  将数据显示在相应Table中

2  实现了JTree与JTable的联动

3  对相应的Table表进行一行的增加与删除(删除时需要点击一行)

 二  代码实现

1 JTree与JTable面板代码实现

[java]  view plain copy
  1. package Library;  
  2.   
  3. import java.awt.BorderLayout;  
  4. import java.awt.Dimension;  
  5. import java.awt.FlowLayout;  
  6. import java.awt.event.*;  
  7. import java.io.BufferedReader;  
  8. import java.io.File;  
  9. import java.io.FileReader;  
  10. import java.io.IOException;  
  11.   
  12. import javax.swing.BorderFactory;  
  13. import javax.swing.JButton;  
  14. import javax.swing.JFrame;  
  15. import javax.swing.JPanel;  
  16. import javax.swing.JScrollPane;  
  17. import javax.swing.JSplitPane;  
  18. import javax.swing.JTable;  
  19. import javax.swing.JTree;  
  20. import javax.swing.event.*;  
  21. import javax.swing.table.DefaultTableModel;  
  22. import javax.swing.tree.DefaultMutableTreeNode;  
  23. import javax.swing.tree.TreePath;  
  24. import javax.swing.tree.TreeSelectionModel;  
  25. /** 
  26.  * @author HuangRong 
  27.  * Date 2013/11/18 
  28.  *  
  29.  */  
  30. public class TreeTableText extends JFrame{  
  31.   
  32.     /** 
  33.      * @param args 
  34.      */  
  35.     private JPanel panel;  
  36.     public JTable table;  
  37.     private JButton but_Add,but_Delect;  
  38.     private JScrollPane treePane;  
  39.     private JScrollPane tablePane;  
  40.     private Object[] node={"借阅图书的学生信息","借阅图书的学生信息"};  
  41.     private DefaultMutableTreeNode node1,node2,top;  
  42.     private DefaultTableModel tableModel1,tableModel2;  
  43.     private JSplitPane split;  
  44.     private String[] colum1 = {"姓名","学号","电话","借书时间"};  
  45.     private String[][] data1 = {"李月""1108010..""183...","2013、2、16" },  
  46.             {"莫寒冰""11080102...""183..","2013、09、21" }, { "李露""1108020...""183...","2013、03、24" } };  
  47.     private String[] colum2 = {"书目类别","书目名称","单价","作者"};  
  48.     private String[][] data2 = {"计算机类""数据结构""78","王伟" },  
  49.             {"光电类""数字电子技术""56","张文" }, { "计算机类""操作系统""90","杨帆" } };  
  50.     private JTree tree;  
  51.     private String name = node[0].toString();  
  52.     TreeTableText(){  
  53.         this.init();  
  54.         setSize(new Dimension(700,500));  
  55.         setVisible(true);  
  56.         addEvent(this);  
  57.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  58.     }  
  59.     public void init(){  
  60.         node1 = new DefaultMutableTreeNode("借阅图书的学生信息");  
  61.         node1.add(new DefaultMutableTreeNode(new User("计算机学院")));  
  62.         node1.add(new DefaultMutableTreeNode(new User("电控学院")));  
  63.         node1.add(new DefaultMutableTreeNode(new User("人文与外国语学院")));  
  64.         node1.add(new DefaultMutableTreeNode(new User("机械学院")));  
  65.         node1.add(new DefaultMutableTreeNode(new User("通信学院")));  
  66.         node1.add(new DefaultMutableTreeNode(new User("能源学院")));  
  67.   
  68.         node2 = new DefaultMutableTreeNode("图书馆的图书库存信息");  
  69.         node2.add(new DefaultMutableTreeNode(new User("文学类")));  
  70.         node2.add(new DefaultMutableTreeNode(new User("商学类")));  
  71.         node2.add(new DefaultMutableTreeNode(new User("计算机类")));  
  72.         node2.add(new DefaultMutableTreeNode(new User("建筑类")));  
  73.         node2.add(new DefaultMutableTreeNode(new User("光电类")));  
  74.         node2.add(new DefaultMutableTreeNode(new User("会计类")));  
  75.    
  76.   
  77.         top = new DefaultMutableTreeNode("图书管理系统");  
  78.         top.add(node1);  
  79.         top.add(node2);  
  80.       
  81.         tree = new JTree(top);  
  82.         add(tree);  
  83.         but_Add=new JButton("增加");  
  84.         but_Delect=new JButton("删除");  
  85.          
  86.         tableModel1 = new DefaultTableModel(data1,colum1);  
  87.         tableModel2 = new DefaultTableModel(data2,colum2);  
  88.         table = new JTable(tableModel2);  
  89.         tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);  
  90.           
  91.           
  92.         panel=new JPanel();  
  93.         panel.setLayout(new FlowLayout(FlowLayout.CENTER,120,70));  
  94.         panel.add(but_Add);  
  95.         panel.add(but_Delect);  
  96.           
  97.         treePane = new JScrollPane();  
  98.         treePane.getViewport().add(tree);  
  99.   
  100.         tablePane = new JScrollPane();  
  101.         tablePane.getViewport().add(table);  
  102.         split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,treePane,tablePane);  
  103.         split.setDividerLocation(0.5);  
  104.         this.getContentPane().add(split,BorderLayout.CENTER);  
  105.         this.getContentPane().add(panel,BorderLayout.SOUTH);  
  106.           
  107.   
  108.     }  
  109.       
  110.     private void addEvent(final TreeTableText value){  
  111.         //匿名类  
  112.         tree.addTreeSelectionListener(new TreeSelectionListener(){  
  113.             public void valueChanged(TreeSelectionEvent e){  
  114.                 JTree tree = (JTree)e.getSource();  
  115.                 DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();  
  116.                 String name = node.toString();  
  117.                 value.name = name;  
  118.                 if(name.equalsIgnoreCase("图书馆的图书库存信息")){  
  119.                     value.table.setModel(value.tableModel2);  
  120.                     value.table.validate();  
  121.                 }  
  122.                 else {  
  123.                     value.table.setModel(value.tableModel1);  
  124.                     value.table.validate();  
  125.                 }  
  126.             }  
  127.         });  
  128.         but_Add.addActionListener(new ActionListener(){  
  129.             public void actionPerformed(ActionEvent e){  
  130.                 DefaultTableModel model = (DefaultTableModel)value.table.getModel();  
  131.                 System.out.println(value.name==null);  
  132.                 if(value.name.equalsIgnoreCase("图书馆的图书库存信息")){  
  133.                     AddUser factory = new AddUser("增加图书馆图书");  
  134.                     factory.setSuper(value);  
  135.                 }  
  136.                 else if(value.name.equalsIgnoreCase("借阅图书的学生信息")){  
  137.                     AddStudent car = new AddStudent("增加借阅的学生信息");  
  138.                     //car.setSuper(value);  
  139.                 }  
  140.                 else{  
  141.                     model.addRow(new Object[]{"12","33"});  
  142.                 }  
  143.   
  144.             }  
  145.         });  
  146.         but_Delect.addActionListener(new ActionListener(){  
  147.             public void actionPerformed(ActionEvent e){  
  148.                 DefaultTableModel model = (DefaultTableModel)value.table.getModel();  
  149.                 int si = table.getSelectedRow();  
  150.                 model.removeRow(si);  
  151.             }  
  152.         });  
  153.     }  
  154.   
  155.     public static void main(String[] args) {  
  156.         // TODO Auto-generated method stub  
  157.         TreeTableText text=new TreeTableText();    
  158.     }  
  159. }  
二 添加类别

[java]  view plain copy
  1. package Library;  
  2. /** 
  3.  * @author HuangRong 
  4.  * Date 2013/11/13 
  5.  *  
  6.  */  
  7. public class User {  
  8.   
  9.         private String name;  
  10.        
  11.         public User(String n) {  
  12.             name = n;  
  13.         }  
  14.        
  15.         // 重点在toString,节点的显示文本就是toString  
  16.         public String toString() {  
  17.             return name;  
  18.         }  
  19. }  

三 增加学生或书籍(两个代码一样,这就贴一个了)

[java]  view plain copy
  1. package Library;  
  2.   
  3. import java.awt.BorderLayout;  
  4. import java.awt.Dimension;  
  5. import java.awt.FlowLayout;  
  6. import java.awt.Font;  
  7. import java.awt.GridBagConstraints;  
  8. import java.awt.GridBagLayout;  
  9. import java.awt.event.ActionEvent;  
  10. import java.awt.event.ActionListener;  
  11.   
  12. import javax.swing.BorderFactory;  
  13. import javax.swing.JButton;  
  14. import javax.swing.JComboBox;  
  15. import javax.swing.JFrame;  
  16. import javax.swing.JLabel;  
  17. import javax.swing.JPanel;  
  18. import javax.swing.JTextField;  
  19. import javax.swing.table.DefaultTableModel;  
  20. /** 
  21.  * @author HuangRong 
  22.  * Date 2013/11/18 
  23.  *  
  24.  */  
  25. public class AddUser extends JFrame{  
  26.   
  27.     private JLabel b_type,b_name,b_price,b_author;  
  28.     JTextField field1,field2,field3,field4;  
  29.     private JComboBox box;  
  30.     private static JButton sureButton;  
  31.     private static JButton cancelButton;  
  32.     public static TreeTableText superModel = new TreeTableText();  
  33.     String b_type1[]={"文学类","商学类","计算机类","建筑类","光电类","会计类"};  
  34.     AddUser(String name){  
  35.         this.setBounds(300,300,500,400);  
  36.         this.setTitle(name);  
  37.         this.setLayout(new GridBagLayout());  
  38.         GridBagConstraints gc = new GridBagConstraints();  
  39.         gc.weightx = 10;  
  40.         gc.weighty = 10;  
  41.         gc.fill = GridBagConstraints.BOTH;  
  42.         gc.gridwidth = GridBagConstraints.REMAINDER;  
  43.         JPanel centerPanel = new JPanel();  
  44.         centerPanel.setBorder(BorderFactory.createTitledBorder("增加内容"));  
  45.           
  46.          
  47.      
  48.         b_type=new JLabel("图书类型:");  
  49.         b_name=new JLabel("图书名称:");  
  50.         b_price=new JLabel("图书价格:");  
  51.         b_author=new JLabel("图书作者:");  
  52.           
  53.         field3 = new JTextField();  
  54.         field2 = new JTextField();  
  55.         field1 = new JTextField();  
  56.         field4 = new JTextField();  
  57.         box = new JComboBox(b_type1);  
  58.          
  59.           
  60.         GridBagLayout centerLayout = new GridBagLayout();  
  61.         centerPanel.setLayout(centerLayout);  
  62.         GridBagConstraints centerGc = new GridBagConstraints();  
  63.         centerGc.fill = GridBagConstraints.BOTH;  
  64.         //weightx分布额外的水平空间  
  65.         centerGc.weightx = 1;  
  66.         //weighty分布额外的垂直空间  
  67.         centerGc.weighty = 1;  
  68.         centerLayout.setConstraints(b_name,centerGc);  
  69.         centerGc.weightx = 3;  
  70.         //REMAINDER指定此组件是其行或列中的最后一个组件  
  71.         centerGc.gridwidth = GridBagConstraints.REMAINDER;  
  72.         centerLayout.setConstraints(field1,centerGc);  
  73.         centerGc.weighty = 2;  
  74.         centerGc.weightx = 1;  
  75.         centerGc.gridwidth = GridBagConstraints.BOTH;  
  76.         centerLayout.setConstraints(b_price,centerGc);  
  77.         centerGc.weightx = 3;  
  78.         centerGc.gridwidth = GridBagConstraints.REMAINDER;  
  79.         centerLayout.setConstraints(field2,centerGc);  
  80.         centerGc.weightx = 3;  
  81.       
  82.         centerGc.gridwidth = GridBagConstraints.BOTH;  
  83.         centerGc.weightx = 1;  
  84.         centerGc.weighty = 1;  
  85.         centerLayout.setConstraints(b_type,centerGc);  
  86.         centerGc.gridwidth = GridBagConstraints.REMAINDER;  
  87.         centerGc.weightx = 3;  
  88.         centerLayout.setConstraints(box,centerGc);  
  89.         centerGc.gridwidth = GridBagConstraints.BOTH;  
  90.         centerGc.weightx = 1;  
  91.         centerGc.weighty = 1;  
  92.         centerLayout.setConstraints(b_author,centerGc);  
  93.         centerGc.weightx = 3;  
  94.         centerGc.gridwidth = GridBagConstraints.REMAINDER;  
  95.         centerLayout.setConstraints(field4,centerGc);  
  96.         centerPanel.add(b_name);  
  97.         centerPanel.add(field1);  
  98.         centerPanel.add(b_price);  
  99.         centerPanel.add(field2);  
  100.           
  101.         centerPanel.add(b_type);  
  102.         centerPanel.add(box);  
  103.         centerPanel.add(b_author);  
  104.         centerPanel.add(field4);  
  105.          
  106.         this.add(centerPanel,gc);  
  107.         gc.weighty = 10;  
  108.         JPanel bottomPanel = new JPanel();  
  109.         bottomPanel.setLayout(new FlowLayout());  
  110.         sureButton = new JButton("确定");  
  111.         sureButton.setFont(new Font("宋体",3,20));  
  112.         cancelButton = new JButton("取消");  
  113.         cancelButton.setFont(new Font("宋体",3,20));  
  114.         bottomPanel.add(sureButton,BorderLayout.CENTER);  
  115.         bottomPanel.add(cancelButton,BorderLayout.CENTER);  
  116.         addEvent(this);  
  117.         this.add(bottomPanel,gc);  
  118.         pack();  
  119.         this.setVisible(true);  
  120.     }  
  121.      public static void addEvent(final AddUser w){  
  122.             sureButton.addActionListener(new ActionListener(){  
  123.                 public void actionPerformed(ActionEvent e){  
  124.                     DefaultTableModel model = (DefaultTableModel)w.superModel.table.getModel();  
  125.                     model.addRow(new Object[]{w.field1.getText(),w.field2.getText(),w.box.getSelectedItem(),w.field4.getText()});  
  126.                     w.superModel.table.validate();  
  127.                     w.dispose();  
  128.   
  129.                 }  
  130.             });  
  131.             cancelButton.addActionListener(new ActionListener(){  
  132.                 public void actionPerformed(ActionEvent e){  
  133.                     w.dispose();  
  134.                 }  
  135.             });  
  136.         }  
  137.         public void setSuper(TreeTableText model){  
  138.             superModel = model;  
  139.         }  
  140. }  

四 运行截图












  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值