实验4 JTable和JTree.docx

上传人:b****6 文档编号:4779823 上传时间:2022-12-08 格式:DOCX 页数:18 大小:307.85KB
下载 相关 举报
实验4 JTable和JTree.docx_第1页
第1页 / 共18页
实验4 JTable和JTree.docx_第2页
第2页 / 共18页
实验4 JTable和JTree.docx_第3页
第3页 / 共18页
实验4 JTable和JTree.docx_第4页
第4页 / 共18页
实验4 JTable和JTree.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

实验4 JTable和JTree.docx

《实验4 JTable和JTree.docx》由会员分享,可在线阅读,更多相关《实验4 JTable和JTree.docx(18页珍藏版)》请在冰豆网上搜索。

实验4 JTable和JTree.docx

实验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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1