实验4 JTable和JTreeWord文件下载.docx
- 文档编号:17724570
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:18
- 大小:307.85KB
实验4 JTable和JTreeWord文件下载.docx
《实验4 JTable和JTreeWord文件下载.docx》由会员分享,可在线阅读,更多相关《实验4 JTable和JTreeWord文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
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"
李小勇"
},
200853225102"
张可立"
200853225103"
王红"
200853225104"
李勇"
200853225105"
张立"
200853225106"
黄晓"
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.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);
id:
p2.add(jtf2);
score:
p2.add(jtf3);
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(){
model.removeRow(jtable.getSelectedRow());
JOptionPane.showMessageDialog(null,"
Pleaseselectarow!
jbt3.addActionListener(newActionListener(){
Stringname=JOptionPane.showInputDialog("
NewColumnName"
model.addColumn(name,newObject[]{});
jbt4.addActionListener(newActionListener(){
if(jtable.getSelectedColumn()>
=0){
TableColumnModelcolumnModel=jtable.getColumnModel();
TableColumntableColum=columnModel.getColumn(jtable.getSelectedColumn());
columnModel.removeColumn(tableColum);
}
Pleaseselectacolumn!
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.event.*;
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[]{"
//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);
rowHeight"
panel2.add(jSpinnerRowHeight);
showsRootHandles"
panel2.add(jcboShowsRootHandles);
getContentPane().add(panel1,BorderLayout.CENTER);
getContentPane().add(panel2,BorderLayout.SOUTH);
//Registerlisteners
jcboRootVisible.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
booleanrootVisible=
jcboRootVisible.getSelectedItem().equals("
jTree1.setRootVisible(rootVisible);
jTree2.setRootVisible(rootVisible);
jTree3.setRootVisible(rootVisible);
});
jcboShowsRootHandles.addActionListener(newActionListener(){
booleanshowsRootHandles=
jcboShowsRootHandles.getSelectedItem().equals("
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);
SimpleTreeDemoapplet=newSimpleTreeDemo();
SimpleTreeDemo"
frame.setSize(400,320);
frame.setLocation((d.width-frame.getSize().width)/2,
(d.height-frame.getSize().height)/2);
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
![提示](https://static.bdocx.com/images/bang_tan.gif)