实验4 JTable和JTree.docx
- 文档编号:4779823
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:18
- 大小:307.85KB
实验4 JTable和JTree.docx
《实验4 JTable和JTree.docx》由会员分享,可在线阅读,更多相关《实验4 JTable和JTree.docx(18页珍藏版)》请在冰豆网上搜索。
实验4JTable和JTree
实验4JTable和JTree
一、实验名称和性质
所属课程
Java语言程序设计
实验名称
JTable和JTree
实验学时
2
实验性质
✓验证综合✓设计
必做/选做
✓必做选做
二、实验目的
1.学会使用JTable显示和处理表格;
2.学会使用JTree在树形层次结构中显示数据。
三、实验内容
1.编写表格处理程序(验证性内容)。
2.编写树形组件演示程序(验证性内容)。
3.(用表格显示文本文件的数据)假设一个名为名为Table.txt的表格存储在文本文件中。
文件的第一行是表头。
其余的行与表格中的行相对应。
元素之间用逗号隔开。
编写一个程序,用JTable组件显示表格(设计性内容)。
4.(创建显示书中章节目录的书)创建一棵树,显示一本书的目录结构。
选定书中的一个结点时,显示描述该结点的一段文字(设计性内容)。
四、实验的软硬件环境要求
硬件环境要求:
PC计算机;内存512MB以上
使用的软件名称、版本号以及模块:
操作系统:
Win7或WindowsXP
软件:
JDK7.0;Eclipse
五、知识准备
前期要求掌握的知识:
掌握常用组件的使用方法。
实验相关理论或原理:
JTable是一个Swing组件,它在一个二维网格的行和列中显示数据。
JTable将数据存储和处理的任务委托给它的数据模型。
表格数据模型必须实现表格模型TableModel接口,该接口定义了许多方法,这些方法可以注册表格模型监听器、管理单元格以及获得行数、列数等。
表格模型管理表格数据。
通过TableModel能够添加和删除行,也能添加一列,但是不能通过TableModel删除列。
为了从JTable中删除列,必须使用表格列模型。
JTableHeader是一个管理JTable表头的GUI组件。
创建一个JTable对象时,自动的创建一个JTableHeader的实例。
默认情况下,拖动列首能够重新排列列的顺序。
当表格中的数据发生变化时,表格模型会触发TableModelEvent事件。
当添加、删除或移动列或表格的选择模型发生变化时,表格列模型会触发TableColumnModelEvent事件。
当选择发生变化时,表格选择模型会触发ListSelectionEvent事件。
JTree是一个Swing组件,它用树形层次结构来显示数据。
当JTree显示一棵树时,树的表示是由TreeModel,TreeNode和TreePath处理的。
TreeModel代表整棵树,TreeNode代表一个结点,TreePath代表到结点的路径。
与ListModel或TableModel不同,TreeMode不直接存储或管理树的数据,树的数据是在TreeNode和TreePath中存储和管理的。
JTree可以引发选择事件TreeSelectionEvent和展开事件TreeExpansionEvent。
只要选择一个新结点,就会引起TreeSelectionEvent事件。
只要展开或折叠一个结点,就会引起TreeExpansionEvent事件。
TreeSelectionListener包含一个处理器valueChanged。
TreeExpansionListener接口treeCollapsedandtreeExpanded2个处理器
六、验证性与设计性实验
1.编写如图13.1所示表格处理程序。
图13.1表格
参考代码
importjava.awt.*;
importjavax.swing.*;
publicclassTestTableextendsJApplet{
//Createtablecolumnnames
String[]columnNames=
{"班级名称","所属学院","学号","姓名"};
//Createtabledata
Object[][]data={
{"计科081","数信学院","200853225101","李小勇"},
{"计科081","数信学院","200853225102","张可立"},
{"计科081","数信学院","200853225103","王红"},
{"计科081","数信学院","200853225104","李勇"},
{"计科081","数信学院","200853225105","张立"},
{"计科081","数信学院","200853225106","黄晓"},
{"计科081","数信学院","200853225107","王明"},
};
//Createatable
JTablejTable1=newJTable(data,columnNames);//创建表格
publicTestTable(){
getContentPane().add(newJScrollPane(jTable1));
}
//Mainmethod
publicstaticvoidmain(String[]args){
TestTableapplet=newTestTable();
JFrameframe=newJFrame();
//EXIT_ON_CLOSE==3
frame.setDefaultCloseOperation(3);
frame.setTitle("学生信息");
frame.getContentPane().add(applet,BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(400,220);
Dimensiond=Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width-frame.getSize().width)/2,(d.height-frame.getSize().height)/2);
frame.setVisible(true);
}
}
2.利用表格控件的模型,实现添加行、删除行、添加列和删除列。
程序运行结果如图13.2所示。
packagech36;
importjava.awt.BorderLayout;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
importjavax.swing.table.TableColumnModel;
publicclassSimpleTableDemoextendsJFrame{
privateJTextFieldjtf1=newJTextField(6);
privateJTextFieldjtf2=newJTextField(6);
privateJTextFieldjtf3=newJTextField(6);
privateJTextFieldjtf4=newJTextField(6);
privateJButtonjbt1=newJButton("addrow");
privateJButtonjbt2=newJButton("deleterow");
privateJButtonjbt3=newJButton("addcolumn");
privateJButtonjbt4=newJButton("deletecolumn");
DefaultTableModelmodel;
JTablejtable;
Stringname1,id1;
intscore1;
booleanpass1;
publicSimpleTableDemo(){
Object[][]data={{"zhang",001,60,true},{"wang",002,80,true},{"zhao",003,59,false}};
String[]columnNames={"name","ID","score","pass"};
finalDefaultTableModelmodel=newDefaultTableModel(data,columnNames);
finalJTablejtable=newJTable(model);
add(newJScrollPane(jtable),BorderLayout.CENTER);
JPanelp1=newJPanel();
p1.add(jbt1);
p1.add(jbt2);
p1.add(jbt3);
p1.add(jbt4);
JPanelp2=newJPanel();
p2.add(newJLabel("name:
"));
p2.add(jtf1);
p2.add(newJLabel("id:
"));
p2.add(jtf2);
p2.add(newJLabel("score:
"));
p2.add(jtf3);
p2.add(newJLabel("pase:
"));
p2.add(jtf4);
JPanelp3=newJPanel();
p3.setLayout(newBorderLayout());
p3.add(p1,BorderLayout.NORTH);
p3.add(p2,BorderLayout.CENTER);
add(p3,BorderLayout.SOUTH);
jbt1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
name1=jtf1.getText();
id1=jtf2.getText();
score1=Integer.parseInt(jtf3.getText());
pass1=Boolean.valueOf(jtf4.getText()).booleanValue();
Object[]object1=newObject[]{name1,id1,score1,pass1};
if(jtable.getSelectedRow()>=0)
model.insertRow(jtable.getSelectedRow(),object1);
else
model.addRow(object1);
}
});
jbt2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(jtable.getSelectedRow()>=0)
model.removeRow(jtable.getSelectedRow());
else
JOptionPane.showMessageDialog(null,"Pleaseselectarow!
");
}
});
jbt3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringname=JOptionPane.showInputDialog("NewColumnName");
model.addColumn(name,newObject[]{});
}
});
jbt4.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(jtable.getSelectedColumn()>=0){
TableColumnModelcolumnModel=jtable.getColumnModel();
TableColumntableColum=columnModel.getColumn(jtable.getSelectedColumn());
columnModel.removeColumn(tableColum);
}
else
JOptionPane.showMessageDialog(null,"Pleaseselectacolumn!
");
}
});
}
publicstaticvoidmain(String[]args){
SimpleTableDemof=newSimpleTableDemo();
f.setTitle("SimpleTableDemo");
f.setSize(700,500);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
}
}
图13.2
3.分别创建三棵树,一棵为对象数组创建的树,一颗为由向量创建的树,还有一棵由散列表创建的树.同时允许用户动态的设置属性rootVisible、rowHeight和ShowRootHandles结果如图13.3所示.
图13.3树
参考代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjava.util.*;
publicclassSimpleTreeDemoextendsJApplet{
//Createadefaulttree
//CreateatreewithanarrayofObjects.
privateJTreejTree1=newJTree(newString[]
{"狗","牛","猫","猪","兔"});
//CreateatreewithaHashtable
privateVectorvector=newVector(Arrays.asList(
newObject[]{"红","绿","黑","白","紫"}));
privateJTreejTree2=newJTree(vector);
privateHashtablehashtable=newHashtable();
privateJTreejTree3;
//CreateacomboboxforselectingrootVisible
privateJComboBoxjcboRootVisible=newJComboBox(
newString[]{"false","true"});
//CreateacomboboxforselectingshowRootHandles
privateJComboBoxjcboShowsRootHandles=newJComboBox(
newString[]{"false","true"});
//Createaspinnerforselectingrowheight
privateJSpinnerjSpinnerRowHeight=newJSpinner(
newSpinnerNumberModel(16,1,50,1));
publicSimpleTreeDemo(){
jTree1.setRootVisible(false);
hashtable.put(newInteger
(1),"red");
hashtable.put(newInteger
(2),"green");
hashtable.put(newInteger(3),"blue");
hashtable.put(newInteger(4),"yellow");
jTree3=newJTree(hashtable);
JPanelpanel1=newJPanel();
panel1.setLayout(newGridLayout(1,4));
panel1.add(newJScrollPane(jTree1));
panel1.add(newJScrollPane(jTree1));
panel1.add(newJScrollPane(jTree3));
JPanelpanel2=newJPanel();
panel2.add(newJLabel("rootVisible"));
panel2.add(jcboRootVisible);
panel2.add(newJLabel("rowHeight"));
panel2.add(jSpinnerRowHeight);
panel2.add(newJLabel("showsRootHandles"));
panel2.add(jcboShowsRootHandles);
getContentPane().add(panel1,BorderLayout.CENTER);
getContentPane().add(panel2,BorderLayout.SOUTH);
//Registerlisteners
jcboRootVisible.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
booleanrootVisible=
jcboRootVisible.getSelectedItem().equals("true");
jTree1.setRootVisible(rootVisible);
jTree2.setRootVisible(rootVisible);
jTree3.setRootVisible(rootVisible);
}
});
jcboShowsRootHandles.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
booleanshowsRootHandles=
jcboShowsRootHandles.getSelectedItem().equals("true");
jTree1.setShowsRootHandles(showsRootHandles);
jTree2.setShowsRootHandles(showsRootHandles);
jTree3.setShowsRootHandles(showsRootHandles);
}
});
jSpinnerRowHeight.addChangeListener(newChangeListener(){
publicvoidstateChanged(ChangeEvente){
intheight=
((Integer)(jSpinnerRowHeight.getValue())).intValue();
jTree1.setRowHeight(height);
jTree2.setRowHeight(height);
jTree3.setRowHeight(height);
}
});
}
publicstaticvoidmain(String[]args){
SimpleTreeDemoapplet=newSimpleTreeDemo();
JFrameframe=newJFrame();
//EXIT_ON_CLOSE==3
frame.setDefaultCloseOperation(3);
frame.setTitle("SimpleTreeDemo");
frame.getContentPane().add(applet,BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(400,320);
Dimensiond=Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width-frame.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,王明,
代码:
packageexperimentFour;
importjava.io.BufferedInputStream;
importjava
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验4 JTable和JTree 实验 JTable JTree