1、实验4 JTable和JTree实验4 JTable和JTree一、实验名称和性质所属课程Java语言程序设计实验名称JTable和JTree实验学时2实验性质验证 综合设计必做/选做必做 选做二、实验目的1.学会使用 JTable 显示和处理表格;2.学会使用 JTree 在树形层次结构中显示数据 。三、实验内容1编写表格处理程序(验证性内容)。2编写树形组件演示程序(验证性内容)。3.(用表格显示文本文件的数据)假设一个名为名为Table.txt的表格存储在文本文件中。文件的第一行是表头。其余的行与表格中的行相对应。元素之间用逗号隔开。编写一个程序,用JTable组件显示表格(设计性内容)
2、。4.(创建显示书中章节目录的书)创建一棵树,显示一本书的目录结构。选定书中的一个结点时,显示描述该结点的一段文字(设计性内容)。四、实验的软硬件环境要求硬件环境要求:PC计算机;内存512MB以上使用的软件名称、版本号以及模块:操作系统:Win 7或Windows XP软件:JDK 7.0;Eclipse五、知识准备前期要求掌握的知识: 掌握常用组件的使用方法。实验相关理论或原理:JTable 是一个Swing组件,它在一个二维网格的行和列中显示数据。 JTable 将数据存储和处理的任务委托给它的数据模型。表格数据模型必须实现表格模型TableModel接口,该接口定义了许多方法,这些方法
3、可以注册表格模型监听器、管理单元格以及获得行数、列数等。表格模型管理表格数据。通过TableModel能够添加和删除行,也能添加一列,但是不能通过TableModel删除列。 为了从JTable中删除列,必须使用表格列模型。JTableHeader 是一个管理JTable表头的GUI组件。创建一个JTable对象时,自动的创建一个JTableHeader的实例。默认情况下,拖动列首能够重新排列列的顺序。当表格中的数据发生变化时,表格模型会触发 TableModelEvent事件。当添加、删除或移动列或表格的选择模型发生变化时,表格列模型会触发 TableColumnModelEvent事件。当
4、选择发生变化时,表格选择模型会触发 ListSelectionEvent 事件。JTree 是一个Swing组件,它用树形层次结构来显示数据。当 JTree 显示一棵树时,树的表示是由 TreeModel, TreeNode和TreePath处理的。 TreeModel 代表整棵树, TreeNode 代表一个结点, TreePath 代表到结点的路径。 与 ListModel 或 TableModel不同, TreeMode 不直接存储或管理树的数据,树的数据是在 TreeNode 和 TreePath中存储和管理的。JTree 可以引发选择事件 TreeSelectionEvent 和 展
5、开事件TreeExpansionEvent。只要选择一个新结点,就会引起TreeSelectionEvent事件。只要展开或折叠一个结点,就会引起TreeExpansionEvent事件。TreeSelectionListener 包含一个处理器 valueChanged。TreeExpansionListener 接口 treeCollapsed and treeExpanded 2个处理器六、验证性与设计性实验1编写如图13.1所示表格处理程序。图13.1 表格参考代码import java.awt.*;import javax.swing.*;public class TestTable
6、 extends JApplet / Create table column names String columnNames = 班级名称, 所属学院, 学号, 姓名; / Create table data Object data = 计科081, 数信学院, 200853225101, 李小勇, 计科081, 数信学院, 200853225102, 张可立, 计科081, 数信学院, 200853225103, 王红, 计科081, 数信学院, 200853225104, 李勇, 计科081, 数信学院, 200853225105, 张立, 计科081, 数信学院, 2008532251
7、06, 黄晓, 计科081, 数信学院, 200853225107, 王明, ; / Create a table JTable jTable1 = new JTable(data,columnNames) ; /创建表格 public TestTable() getContentPane().add(new JScrollPane(jTable1); /Main method public static void main(String args) TestTable applet = new TestTable(); JFrame frame = new JFrame(); /EXIT_O
8、N_CLOSE = 3 frame.setDefaultCloseOperation(3); frame.setTitle(学生信息); frame.getContentPane().add(applet, BorderLayout.CENTER); applet.init(); applet.start(); frame.setSize(400,220); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation(d.width - frame.getSize().width) / 2, (d.h
9、eight - frame.getSize().height) / 2); frame.setVisible(true); 2. 利用表格控件的模型,实现添加行、删除行、添加列和删除列。程序运行结果如图13.2所示。package ch36;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import javax.swing.table.Defaul
10、tTableModel;import javax.swing.table.TableColumnModel;public class SimpleTableDemo extends JFrame private JTextField jtf1 = new JTextField(6); private JTextField jtf2 = new JTextField(6); private JTextField jtf3 = new JTextField(6); private JTextField jtf4 = new JTextField(6); private JButton jbt1 =
11、 new JButton(add row); private JButton jbt2 = new JButton(delete row); private JButton jbt3 = new JButton(add column); private JButton jbt4 = new JButton(delete column); DefaultTableModel model; JTable jtable; String name1,id1; int score1; boolean pass1; public SimpleTableDemo() Objectdata = zhang,0
12、01,60,true,wang,002,80,true,zhao,003,59,false; StringcolumnNames = name,ID,score,pass; final DefaultTableModel model = new DefaultTableModel(data,columnNames); final JTable jtable = new JTable(model); add(new JScrollPane(jtable),BorderLayout.CENTER); JPanel p1 = new JPanel(); p1.add(jbt1); p1.add(jb
13、t2); p1.add(jbt3); p1.add(jbt4); JPanel p2 = new JPanel(); p2.add(new JLabel(name:); p2.add(jtf1); p2.add(new JLabel(id:); p2.add(jtf2); p2.add(new JLabel(score:); p2.add(jtf3); p2.add(new JLabel(pase:); p2.add(jtf4); JPanel p3 = new JPanel(); p3.setLayout(new BorderLayout(); p3.add(p1,BorderLayout.
14、NORTH); p3.add(p2,BorderLayout.CENTER); add(p3,BorderLayout.SOUTH); jbt1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) name1 = jtf1.getText(); id1 = jtf2.getText(); score1 = Integer.parseInt(jtf3.getText(); pass1 = Boolean.valueOf(jtf4.getText().booleanValue(); Ob
15、ject object1 = new Objectname1,id1,score1,pass1; if(jtable.getSelectedRow() = 0) model.insertRow(jtable.getSelectedRow(), object1); else model.addRow(object1); ); jbt2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(jtable.getSelectedRow() = 0) model.removeRow(jt
16、able.getSelectedRow(); else JOptionPane.showMessageDialog(null, Please select a row!); ); jbt3.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String name = JOptionPane.showInputDialog(New Column Name); model.addColumn(name,new Object); ); jbt4.addActionListener(new
17、 ActionListener() public void actionPerformed(ActionEvent e) if(jtable.getSelectedColumn() = 0 ) TableColumnModel columnModel = jtable.getColumnModel(); TableColumn tableColum = columnModel.getColumn(jtable.getSelectedColumn(); columnModel.removeColumn(tableColum); else JOptionPane.showMessageDialog
18、(null, Please select a column!); ); public static void main(String args) SimpleTableDemo f=new SimpleTableDemo(); f.setTitle(SimpleTableDemo); f.setSize(700,500); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); 图13.23.分别创建三棵树,一棵为对象数组创建的树,一颗为由向量创建的
19、树,还有一棵由散列表创建的树.同时允许用户动态的设置属性rootVisible、rowHeight和ShowRootHandles结果如图13.3所示. 图13.3 树参考代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class SimpleTreeDemo extends JApplet / Create a default tree / Create a tree with an array of Ob
20、jects. private JTree jTree1 = new JTree(new String 狗, 牛, 猫, 猪, 兔); / Create a tree with a Hashtable private Vector vector = new Vector(Arrays.asList( new Object红, 绿, 黑, 白, 紫); private JTree jTree2 = new JTree(vector); private Hashtable hashtable = new Hashtable(); private JTree jTree3; / Create a co
21、mbo box for selecting rootVisible private JComboBox jcboRootVisible = new JComboBox( new Stringfalse, true); / Create a combo box for selecting showRootHandles private JComboBox jcboShowsRootHandles = new JComboBox( new String false, true); / Create a spinner for selecting row height private JSpinne
22、r jSpinnerRowHeight = new JSpinner( new SpinnerNumberModel(16, 1, 50, 1); public SimpleTreeDemo() jTree1.setRootVisible(false); hashtable.put(new Integer(1), red); hashtable.put(new Integer(2), green); hashtable.put(new Integer(3), blue); hashtable.put(new Integer(4), yellow); jTree3 = new JTree(has
23、htable); JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(1,4) ); panel1.add(new JScrollPane(jTree1); panel1.add( new JScrollPane(jTree1) ); panel1.add(new JScrollPane(jTree3); JPanel panel2 = new JPanel(); panel2.add(new JLabel(rootVisible); panel2.add(jcboRootVisible); panel2.add(new
24、JLabel(rowHeight); panel2.add(jSpinnerRowHeight); panel2.add(new JLabel(showsRootHandles); panel2.add(jcboShowsRootHandles); getContentPane().add(panel1, BorderLayout.CENTER); getContentPane().add(panel2, BorderLayout.SOUTH); / Register listeners jcboRootVisible.addActionListener(new ActionListener(
25、) public void actionPerformed(ActionEvent e) boolean rootVisible = jcboRootVisible.getSelectedItem().equals(true); jTree1.setRootVisible(rootVisible); jTree2.setRootVisible(rootVisible); jTree3.setRootVisible(rootVisible); ); jcboShowsRootHandles.addActionListener(new ActionListener() public void ac
26、tionPerformed(ActionEvent e) boolean showsRootHandles = jcboShowsRootHandles.getSelectedItem().equals(true); jTree1.setShowsRootHandles(showsRootHandles); jTree2.setShowsRootHandles(showsRootHandles); jTree3.setShowsRootHandles(showsRootHandles); ); jSpinnerRowHeight.addChangeListener(new ChangeList
27、ener() public void stateChanged(ChangeEvent e) int height = (Integer)(jSpinnerRowHeight.getValue().intValue(); jTree1.setRowHeight(height); jTree2.setRowHeight(height); jTree3.setRowHeight(height); ); public static void main(String args) SimpleTreeDemo applet = new SimpleTreeDemo(); JFrame frame = n
28、ew JFrame(); /EXIT_ON_CLOSE = 3 frame.setDefaultCloseOperation(3); frame.setTitle(SimpleTreeDemo); frame.getContentPane().add(applet, BorderLayout.CENTER); applet.init(); applet.start(); frame.setSize(400,320); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation(d.width - fr
29、ame.getSize().width) / 2, (d.height - frame.getSize().height) / 2); frame.setVisible(true); 4.(1)(用表格显示文本文件的数据)假设一个名为名为Table.txt的表格存储在文本文件中。文件的第一行是表头。其余的行与表格中的行相对应。元素之间用逗号隔开。编写一个程序,用JTable组件显示表格。例如下面的文本文件中显示在表格中,则如下图所示。班级名称, 所属学院, 学号, 姓名计科081, 数信学院, 200853225101, 李小勇,计科081, 数信学院, 200853225102, 张可立,计科081, 数信学院, 200853225103, 王红,计科081, 数信学院, 200853225104, 李勇,计科081, 数信学院, 200853225105, 张立,计科081, 数信学院, 200853225106, 黄晓,计科081, 数信学院, 200853225107, 王明,代码:package experimentFour;import java.io.BufferedInputStream;import java
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1