在作业中有遇到有关JTree与JTable的联动的问题,后来在网上查了好多,都写得不全的样子,所以就写了一个小程序以作巩固和供需要的人参考
一 实现功能
1 将数据显示在相应Table中
2 实现了JTree与JTable的联动
3 对相应的Table表进行一行的增加与删除(删除时需要点击一行)
二 代码实现
1 JTree与JTable面板代码实现
- package Library;
- import java.awt.BorderLayout;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.awt.event.*;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import javax.swing.BorderFactory;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JSplitPane;
- import javax.swing.JTable;
- import javax.swing.JTree;
- import javax.swing.event.*;
- import javax.swing.table.DefaultTableModel;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.TreePath;
- import javax.swing.tree.TreeSelectionModel;
- /**
- * @author HuangRong
- * Date 2013/11/18
- *
- */
- public class TreeTableText extends JFrame{
- /**
- * @param args
- */
- private JPanel panel;
- public JTable table;
- private JButton but_Add,but_Delect;
- private JScrollPane treePane;
- private JScrollPane tablePane;
- private Object[] node={"借阅图书的学生信息","借阅图书的学生信息"};
- private DefaultMutableTreeNode node1,node2,top;
- private DefaultTableModel tableModel1,tableModel2;
- private JSplitPane split;
- private String[] colum1 = {"姓名","学号","电话","借书时间"};
- private String[][] data1 = {{ "李月", "1108010..", "183...","2013、2、16" },
- {"莫寒冰", "11080102...", "183..","2013、09、21" }, { "李露", "1108020...", "183...","2013、03、24" } };
- private String[] colum2 = {"书目类别","书目名称","单价","作者"};
- private String[][] data2 = {{ "计算机类", "数据结构", "78","王伟" },
- {"光电类", "数字电子技术", "56","张文" }, { "计算机类", "操作系统", "90","杨帆" } };
- private JTree tree;
- private String name = node[0].toString();
- TreeTableText(){
- this.init();
- setSize(new Dimension(700,500));
- setVisible(true);
- addEvent(this);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public void init(){
- node1 = new DefaultMutableTreeNode("借阅图书的学生信息");
- node1.add(new DefaultMutableTreeNode(new User("计算机学院")));
- node1.add(new DefaultMutableTreeNode(new User("电控学院")));
- node1.add(new DefaultMutableTreeNode(new User("人文与外国语学院")));
- node1.add(new DefaultMutableTreeNode(new User("机械学院")));
- node1.add(new DefaultMutableTreeNode(new User("通信学院")));
- node1.add(new DefaultMutableTreeNode(new User("能源学院")));
- node2 = new DefaultMutableTreeNode("图书馆的图书库存信息");
- node2.add(new DefaultMutableTreeNode(new User("文学类")));
- node2.add(new DefaultMutableTreeNode(new User("商学类")));
- node2.add(new DefaultMutableTreeNode(new User("计算机类")));
- node2.add(new DefaultMutableTreeNode(new User("建筑类")));
- node2.add(new DefaultMutableTreeNode(new User("光电类")));
- node2.add(new DefaultMutableTreeNode(new User("会计类")));
- top = new DefaultMutableTreeNode("图书管理系统");
- top.add(node1);
- top.add(node2);
- tree = new JTree(top);
- add(tree);
- but_Add=new JButton("增加");
- but_Delect=new JButton("删除");
- tableModel1 = new DefaultTableModel(data1,colum1);
- tableModel2 = new DefaultTableModel(data2,colum2);
- table = new JTable(tableModel2);
- tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
- panel=new JPanel();
- panel.setLayout(new FlowLayout(FlowLayout.CENTER,120,70));
- panel.add(but_Add);
- panel.add(but_Delect);
- treePane = new JScrollPane();
- treePane.getViewport().add(tree);
- tablePane = new JScrollPane();
- tablePane.getViewport().add(table);
- split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,treePane,tablePane);
- split.setDividerLocation(0.5);
- this.getContentPane().add(split,BorderLayout.CENTER);
- this.getContentPane().add(panel,BorderLayout.SOUTH);
- }
- private void addEvent(final TreeTableText value){
- //匿名类
- tree.addTreeSelectionListener(new TreeSelectionListener(){
- public void valueChanged(TreeSelectionEvent e){
- JTree tree = (JTree)e.getSource();
- DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
- String name = node.toString();
- value.name = name;
- if(name.equalsIgnoreCase("图书馆的图书库存信息")){
- value.table.setModel(value.tableModel2);
- value.table.validate();
- }
- else {
- value.table.setModel(value.tableModel1);
- value.table.validate();
- }
- }
- });
- but_Add.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- DefaultTableModel model = (DefaultTableModel)value.table.getModel();
- System.out.println(value.name==null);
- if(value.name.equalsIgnoreCase("图书馆的图书库存信息")){
- AddUser factory = new AddUser("增加图书馆图书");
- factory.setSuper(value);
- }
- else if(value.name.equalsIgnoreCase("借阅图书的学生信息")){
- AddStudent car = new AddStudent("增加借阅的学生信息");
- //car.setSuper(value);
- }
- else{
- model.addRow(new Object[]{"12","33"});
- }
- }
- });
- but_Delect.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- DefaultTableModel model = (DefaultTableModel)value.table.getModel();
- int si = table.getSelectedRow();
- model.removeRow(si);
- }
- });
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- TreeTableText text=new TreeTableText();
- }
- }
- package Library;
- /**
- * @author HuangRong
- * Date 2013/11/13
- *
- */
- public class User {
- private String name;
- public User(String n) {
- name = n;
- }
- // 重点在toString,节点的显示文本就是toString
- public String toString() {
- return name;
- }
- }
三 增加学生或书籍(两个代码一样,这就贴一个了)
- package Library;
- import java.awt.BorderLayout;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.awt.Font;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.BorderFactory;
- import javax.swing.JButton;
- import javax.swing.JComboBox;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- import javax.swing.table.DefaultTableModel;
- /**
- * @author HuangRong
- * Date 2013/11/18
- *
- */
- public class AddUser extends JFrame{
- private JLabel b_type,b_name,b_price,b_author;
- JTextField field1,field2,field3,field4;
- private JComboBox box;
- private static JButton sureButton;
- private static JButton cancelButton;
- public static TreeTableText superModel = new TreeTableText();
- String b_type1[]={"文学类","商学类","计算机类","建筑类","光电类","会计类"};
- AddUser(String name){
- this.setBounds(300,300,500,400);
- this.setTitle(name);
- this.setLayout(new GridBagLayout());
- GridBagConstraints gc = new GridBagConstraints();
- gc.weightx = 10;
- gc.weighty = 10;
- gc.fill = GridBagConstraints.BOTH;
- gc.gridwidth = GridBagConstraints.REMAINDER;
- JPanel centerPanel = new JPanel();
- centerPanel.setBorder(BorderFactory.createTitledBorder("增加内容"));
- b_type=new JLabel("图书类型:");
- b_name=new JLabel("图书名称:");
- b_price=new JLabel("图书价格:");
- b_author=new JLabel("图书作者:");
- field3 = new JTextField();
- field2 = new JTextField();
- field1 = new JTextField();
- field4 = new JTextField();
- box = new JComboBox(b_type1);
- GridBagLayout centerLayout = new GridBagLayout();
- centerPanel.setLayout(centerLayout);
- GridBagConstraints centerGc = new GridBagConstraints();
- centerGc.fill = GridBagConstraints.BOTH;
- //weightx分布额外的水平空间
- centerGc.weightx = 1;
- //weighty分布额外的垂直空间
- centerGc.weighty = 1;
- centerLayout.setConstraints(b_name,centerGc);
- centerGc.weightx = 3;
- //REMAINDER指定此组件是其行或列中的最后一个组件
- centerGc.gridwidth = GridBagConstraints.REMAINDER;
- centerLayout.setConstraints(field1,centerGc);
- centerGc.weighty = 2;
- centerGc.weightx = 1;
- centerGc.gridwidth = GridBagConstraints.BOTH;
- centerLayout.setConstraints(b_price,centerGc);
- centerGc.weightx = 3;
- centerGc.gridwidth = GridBagConstraints.REMAINDER;
- centerLayout.setConstraints(field2,centerGc);
- centerGc.weightx = 3;
- centerGc.gridwidth = GridBagConstraints.BOTH;
- centerGc.weightx = 1;
- centerGc.weighty = 1;
- centerLayout.setConstraints(b_type,centerGc);
- centerGc.gridwidth = GridBagConstraints.REMAINDER;
- centerGc.weightx = 3;
- centerLayout.setConstraints(box,centerGc);
- centerGc.gridwidth = GridBagConstraints.BOTH;
- centerGc.weightx = 1;
- centerGc.weighty = 1;
- centerLayout.setConstraints(b_author,centerGc);
- centerGc.weightx = 3;
- centerGc.gridwidth = GridBagConstraints.REMAINDER;
- centerLayout.setConstraints(field4,centerGc);
- centerPanel.add(b_name);
- centerPanel.add(field1);
- centerPanel.add(b_price);
- centerPanel.add(field2);
- centerPanel.add(b_type);
- centerPanel.add(box);
- centerPanel.add(b_author);
- centerPanel.add(field4);
- this.add(centerPanel,gc);
- gc.weighty = 10;
- JPanel bottomPanel = new JPanel();
- bottomPanel.setLayout(new FlowLayout());
- sureButton = new JButton("确定");
- sureButton.setFont(new Font("宋体",3,20));
- cancelButton = new JButton("取消");
- cancelButton.setFont(new Font("宋体",3,20));
- bottomPanel.add(sureButton,BorderLayout.CENTER);
- bottomPanel.add(cancelButton,BorderLayout.CENTER);
- addEvent(this);
- this.add(bottomPanel,gc);
- pack();
- this.setVisible(true);
- }
- public static void addEvent(final AddUser w){
- sureButton.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- DefaultTableModel model = (DefaultTableModel)w.superModel.table.getModel();
- model.addRow(new Object[]{w.field1.getText(),w.field2.getText(),w.box.getSelectedItem(),w.field4.getText()});
- w.superModel.table.validate();
- w.dispose();
- }
- });
- cancelButton.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- w.dispose();
- }
- });
- }
- public void setSuper(TreeTableText model){
- superModel = model;
- }
- }
四 运行截图