![第4章Swing设计思想_第1页](http://file4.renrendoc.com/view/cef7fb33495080c09679fd02f2871e7e/cef7fb33495080c09679fd02f2871e7e1.gif)
![第4章Swing设计思想_第2页](http://file4.renrendoc.com/view/cef7fb33495080c09679fd02f2871e7e/cef7fb33495080c09679fd02f2871e7e2.gif)
![第4章Swing设计思想_第3页](http://file4.renrendoc.com/view/cef7fb33495080c09679fd02f2871e7e/cef7fb33495080c09679fd02f2871e7e3.gif)
![第4章Swing设计思想_第4页](http://file4.renrendoc.com/view/cef7fb33495080c09679fd02f2871e7e/cef7fb33495080c09679fd02f2871e7e4.gif)
![第4章Swing设计思想_第5页](http://file4.renrendoc.com/view/cef7fb33495080c09679fd02f2871e7e/cef7fb33495080c09679fd02f2871e7e5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章Swing界面设计课程目标JList控件JTree控件JTable控件课程定位JList控件及其应用JList控件用于显示对象列表的组件,并且允许用户选择列表中的一项或多项。JList与JCheckbox有些相似,都可以选择其中的一个或多个选项,不同的是,JList的选取方式是整列选取。我们先来看看JList所提供的构造函数。 JList提供了以下四个构造函数: JList() 建立一个新的JList控件 JList(ListModeldataModel) 利用ListModel建立一个新的JList控件 JList(Object[]listData) 利用Array(数组)对象建立一个新的JList控件 JList(VectorlistData) 利用Vector(矢量集)对象建立一个新的JList控件JList常用方法voidclearSelection() 清除已选中项。int[]getSelectedIndices() 获得已选择项的索引值。Object[]getSelectedValues() 获得已选择项的内容。booleanisSelectedIndex(intindex) 判断index位置上的项目是否被选中,并返回值。voidsetListData(Object[]listData) 设置创建列表框的数组对象。voidsetListData(VectorlistData) 设置创建列表框的矢量集对象。voidsetModel(ListModeldataModel)设置创建列表框的列表框模板。voidsetSelectionModel(ListSelectionModelmodel) 设置列表框的选择方式,由ListSelectionModel提供3个静态参数:MULTIPLE_INTERVAL_SELECTIONSINGLE_INTERVAL_SELECTIONSINGLE_SELECTION允许隔项多选允许连续多选只允许单选示例
importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; importjava.util.Vector; publicclassJListAppextendsJFrame{ publicJListApp(){ super("JList示例");
ContainercontentPane=this.getContentPane();
contentPane.setLayout(newGridLayout(1,2)); String[]s2={"乔丹","李翔","科比","姚明","丁俊辉","SKY","其他"}; Vectorv=newVector();
v.addElement("Nokia3310");
v.addElement("Nokia8850");
v.addElement("MotorolaV8088");
v.addElement("PanasonicGD92");
v.addElement("PanasonicGD93");
v.addElement("NECDB2100");
v.addElement("其他");
JListlist2=newJList(s2); list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list2.setBorder(BorderFactory.createTitledBorder("您最喜欢哪个运动员呢?"));
JListlist3=newJList(v); list3.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); list3.setBorder(BorderFactory.createTitledBorder("您最喜欢哪一种手机?"));
contentPane.add(newJScrollPane(list2));
contentPane.add(newJScrollPane(list3));
this.pack();
this.show();
this.addWindowListener(new
WindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } }); } publicstaticvoidmain(String
args[]) { newJListApp(); } }JTree控件及其应用显示一组层次关系分明的数据,用“树状图”表示能提供给用户一个直观易用的界面JTree类实现类似Windows资源管理器左半部分的树型层次结构通过点击树型结构的结点可以展开或合并树状结构的图表数据。JTree同样是根据MVC设计思想设计出来的JTree的主要功能是把数据按照层次关系通过树状结构显示出来,其数据来源于其它对象,如Hashtable、Vector等。JTree的构造函数 JTree() 创建JTree组件。JTree(Hashtablevalue) 通过Hashtable对象创建一个JTree组件,不显示根结点。JTree(Object[]value) 使用数组建立JTree组件,只有这个构造函数可以创建多个根结点。JTree(TreeModelnewModel) 显示根节点,使用指定的数据模型创建树。JTree(TreeNoderoot) 使用TreeNode对象创建一个含有根接点的JTree组件。JTree(TreeNoderoot,booleanasksAllowsChildren) 通过TreeNode对象建立一个JTree组件,设置其是否允许添加子树。JTree(Vectorvalue) 通过用Vector对象创建一个JTree组件。JTree控件的常用方法addSelectionRow(introw) 将指定行的路径添加到当前选择。cancelEditing() 取消当前编辑会话。clearSelection() 清除该选择。TreeModelgetModel() 创建并返回一个TreeModel示例。TreePathgetSelectionPath() 返回首选节点的路径。intgetSelectionCount() 返回选择的节点数。int[]getSelectionRows() 返回所有当前选择的行。intgetRowCount() 返回当前显示的行数。booleanisEditable() 如果树可编辑,则返回true。booleanisSelectionEmpty() 如果该选择当前为空,则返回true。removeSelectionInterval(intindex0,intindex1) 从该选择中移除index0和index1(包含)之间的节点。removeSelectionRow(introw) 从当前选择移除索引row处的行。setEditable(booleanflag) 设置树是否可编辑。setRowHeight(introwHeight) 设置每个单元格的高度(以像素为单位)。setSelectionRow(introw) 选择显示的指定行的节点。setVisibleRowCount(intnewCount) 设置要显示的行数。JTree控件的创建通过Hashtabel、Vector或字符串数组对象为参数,创建JTree对象。语句如下: String[]s1={"公司文件","个人信件","私人文件"}; Hashtablehashtable1=newHashtable(); hashtable1.put("我的公文包",s1); JTreetree=newJTree(hashtable1);
示例
importjava.awt.BorderLayout; importjavax.swing.*; importjavax.swing.event.*; importjavax.swing.tree.DefaultMutableTreeNode; publicclassJTreeEventAppextendsJFrameimplementsTreeSelectionListener{ publicJTreeEventApp(){ super("学生管理系统示意图");
DefaultMutableTreeNodehome=newDefaultMutableTreeNode("学生管理系统");
DefaultMutableTreeNodestu1=newDefaultMutableTreeNode(new
UserInfo("张三","beijing",));
DefaultMutableTreeNodestu2=newDefaultMutableTreeNode(new
UserInfo("李四","shanghai",));
DefaultMutableTreeNodestu3=newDefaultMutableTreeNode(new
UserInfo("小刚","wuhan",)); home.add(stu1);home.add(stu2);home.add(stu3);
JTreetree=newJTree(home);
tree.addTreeSelectionListener(this);
JScrollPane
scrollPane=newJScrollPane(tree);
this.getContentPane().add(scrollPane,BorderLayout.CENTER);
this.pack();
this.setVisible(true);
this.show(); }
publicvoidvalueChanged(TreeSelectionEvente){
JTreetree=(JTree)e.getSource();
DefaultMutableTreeNodenode= (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(node.isLeaf()){
UserInfouser=(UserInfo)node.getUserObject();
System.out.println("姓名为:"+user.getUsername()+ "地址为:"+user.getAddress()+"电话为:"+user.getPhone()); } } publicstaticvoidmain(String[]args){ newJTreeEventApp(); } } classUserInfo{ privateStringusername; privateStringaddress; privateStringphone;
UserInfo(Stringusername,Stringaddress,Stringphone){
this.username=username;
this.address=address;
this.phone=phone; } publicStringtoString(){ returnusername; } publicStringgetAddress(){ returnaddress; } publicStringgetPhone(){ returnphone; } publicStringgetUsername(){ returnusername; } }使用TreeModel构造JTree通过TreeModel创建JTree对象时要用到一个重要的类:DefaultMutableTreeNode,这个类生成的对象是树中的通用节点。要知道一个树节点最多可以有一个父节点、0个或多个子节点。通过DefaultMutableTreeNode类,某个节点可以很方便的查找或修改父节点和子节点,同时能查找某个节点属于哪个树。 DefaultMutableTreeNode类的常用方法:add(MutableTreeNode
newChild)
将newChild添加到某节点的子数组的结尾,使其成为此节点的子节点。remove(int
childIndex)
从此节点的子节点中移除指定索引处的子节点,并将该节点的父节点设置为null。removeAllChildren()
通过将其父节点设置为null,移除此节点的所有子节点。JTable控件及应用JTable是Swing包新增加的组件,主要功能是把数据以二维表格的形式显示出来。使用表格最好先生成一个MyTableModel类型的对象来装载数据,这个类是从AbstractTableModel类中继承而来的,其中有几个方法是一定要重写。例如getColumnCount()方法、getRowCount()方法、getColumnName()方法和getValueAt()方法。因为JTable会从这个对象中自动获取表格显示所必需的数据,AbstractTableModel类封装了表格(行、列)设置、内容的填写、赋值、表格单元更新的检测等等,一切跟表格内容有关的属性及其操作。JTable类生成的对象以TableModel对象为参数,并负责将TableModel对象中的数据以表格的形式显示出来。JTable的构造函数JTable() 构造默认的JTable,使用默认的数据模型、列模型和选择模型对其进行初始化JTable(intnumRows,intnumColumns) 使用DefaultTableModel构造具有空单元格,包含numRows行和numColumns列的JTable。JTable(Object[][]rowData,Object[]columnNames) 构造JTable,用来显示二维数组rowData中的数据,其列名称为columnNames。JTable(TableModeldm) 构造JTable,使用dm作为数据模型、默认的列模型和默认的选择模型对其进行初始化。JTable(TableModeldm,TableColumnModelcm) 建立一个JTable,设置数据模式与字段模式,并有默认的选择模式。JTable(TableModeldm,TableColumnModelcm,ListSelectionModelsm) 建立一个JTable,设置数据模式、字段模式、与选择模式。JTable(VectorrowData,VectorcolumnNames) 构造JTable,用来显示Vector(rowData)中的值,其列名称为columnNames。JTable的常用的方法addColumn(TableColumnaColumn) 将aColumn追加到此JTable的列模型所保持的列数组的结尾。removeColumn(TableColumnaColumn) 从此JTable的列数组中移除aColumn。getColumnCount() 返回列模型中的列数。getGridColor() 返回用来绘制网格线的颜色。getSelectedColumnCount() 返回选定的列数。getSelectedColumns() 返回所有选定列的索引。paramString() 返回此表的字符串表示形式。selectAll() 选择表中的所有行、列及单元格。setSelectionMode(intselectionMode) 设置表的选择模式为:允许单个选择、单个连续单元格选择或多个连续选择中的一种setRowHeight(introwHeight) 将所有单元格的高度设置为rowHeight(以像素为单位)、重新验证并重新绘制JTable JTable类所包含的方法还有很多,出于篇幅限制在此就不一一介绍了JTable控件的创建创建JTable对象有很多的方法,正如JTable有多个构造函数一样,下面我们通过JTable(Object[][]rowData,Object[]columnNames)这个构造函数来创建一个简单的JTable对象。 参考代码如下: Object[][]data= { {"笨笨",newInteger(66), newInteger(32),newInteger(98),newBoolean(false), newBoolean(false) }, {"三毛",newInteger(85), newInteger(69),newInteger(154),newBoolean(true), newBoolean(false) },};String[]column={"姓名","语文","数学","总分",及格","作弊"};JTabletable=newJTable(data,column);此JTable对象代表了一个显示学生成绩的表单,将其添加到JFrame中去会显示如图所示的效果:我们可以把JTable添加到JScrollPane控件中。参考代码如下: JScrollPanescrollPane=newJScrollPane(table);
使用Swing来构造一个表格其实很简单的,只要你利用Vector或Array作为我们表格的数据输入对象,将Vector或Array的内容填入到JTable中,一个基本的表格就产生了。利用DefaultTableModel创建JTable下面我们用DefaultTableModel对象构造一个默认的JTable对象: DefaultTableModeltableModel=newDefaultTableModel(); tableModel.setDataVector(data,column); JTabletable=newJTable(tableModel); JScrollPanepane=newJScrollPane(table);视图与模型机制一个好的用户界面(GUI)设计通常可以在现实世界找到相应的原形。例如,我们可以设计出一个外观跟键盘按键类似的按钮。从这个简单的按钮,我们就可以看出一个GUI设计的规则,它由两个主要的部分构成:一部分包含按钮具有的动作特性,如执行被按下操作;另外一部分包含按钮的外形表现,如这个按钮的背景A还是B等。看清楚这两点你就发现了一个很有趣的设计方法,这种方法鼓励重用(reuse),而不是重新设计(redesign)。你会发现按钮都有相同的机理,所以我们没必要为每个按钮都设计一份图纸,这样太浪费时间。如果把上述设计思想应用到软件开发领域,它的优越性将更为明显。这就是我们将要讲到的MVC设计模式,所谓MVC是一个在软件开发领域应用非常广泛的技术视图与模型机制Model/View/Controller(MVC),MVC便是基于这种思想的一个实现。MVC模式视图与模型机制(MVC)简介MVC首先是一种设计模式,它把一个软件分解为三个不同的部分:Model、View、Controller。
Model: 代表组件状态和低级行为的部分,它管理着自身的状态并且处理所有对状态的操作,Model自己本身并不知道使用自己的View和Controller,系统维护着它和View之间的关系,当Model发生了变化时,系统会通知相应的View,使其做出响应。View: 代表了管理Model所含有的数据的一个视觉上的呈现。一个Model可以有多个View,但是Swing中却很少有这样的情况。Controller: 管理Model和用户之间的交互。当Model的状态发生了变化时,Controller会提供一些方法去响应这些变化。 尽管MVC设计模式通常是用来设计整个用户界面(GUI)的,但是很多设计者们却独具创新的运用这种设计模式设计出了Swing中的单个组件(Component),例如表格JTable、树JTree、组合下拉列表框JComboBox等等。这些组件都有一个Model,一个View,一个Controller,而且,这些Model、View、Controller可以独立的改变,当组件正在被使用的时候也是如此。这种特性使得开发GUI界面显得非常灵活。体会视图与模型机制(MVC)一个按钮的Model所应该具备的行为,由一个ButtonModel接口来定义。一个按钮model实例封装了其内部的状态,并且定义了按钮的行为。它的所有方法可以分为四类:
查询内部状态 操作内部状态 添加和删除事件监听器 发生事件 程序员通常并不会直接和Model以及View/Controller打交道,因为Model、View以及Controller通常隐藏于那些继承了java.awt.Component类的组件中,这些组件就像胶水一样把MVC三者合为一体。一个程序员可以很方便的使用Swing组件和AWT组件。小结JList控件JTree控件JTable控件动手实践:通讯录使用高级控件编程通讯录程序目标使用JTable控件实现一个通讯录程序,通讯录通过按钮事件来实现记录的添加、删除、修改和查找等操作。 程序运行过程如下: 1.程序启动后,运行结果如图所示:添加记录点击“增加”按钮,会弹出提示输入姓名的“输入”对话框,如图所示:输入要添加的姓名,例如“李强”,点击“确定”按钮后,还会继续弹出提示输入其他信息的对话框,如性别、年龄、住址等,依次输入完毕后JTable控件中会显示出用户输入的记录信息,如图所示:删除记录选中要删除的一行记录,如选择姓名为“马华”的这条记录,后点击“删除”按钮,会发现马华这条记录从JTable中删除了。删除后的程序运行效果如图所示:查找记录以姓名为关键字来进行查找操作,点击“查找”按钮后,会弹出查找对话框,在对话框的文本框中输入要查找的姓名;例如输入要查询的姓名为“李强”,点击对话框的“确定”按钮后,如果存在该记录,则会弹出查找记录的消息对话框,如图所示:信息提示如果查找记录不存在,则弹出不存在该用户的消息对话框,例如我们查找姓名为“方芳”的记录(姓名为“方芳”的记录不存在),显示效果如图所示:(1)导入程序所需要的类
importjava.awt.*; importjava.awt.event.*; importjava.util.Vector; importjava.util.*; importjavax.swing.*; importjavax.swing.event.*; importjavax.swing.table.*; importjava.awt.event.ActionListener; importjava.util.EventListener; importjavax.swing.event.ListSelectionListener;(2)事件代码(2)新建一个继承JFrame的类并实现ActionListener和ListSelectionListener接口,设计程序的框架,参考代码如下:
publicclassMessageListAppextendsJFrameimplementsActionListener,ListSelectionListener{ //定义程序要用到的全局对象
publicMessageListApp(){ super("通讯录");
this.addItem();
this.pack();
this.show(); } publicvoidaddItem(){ //自定义一个添加组件的方法并初始化JTable数据,注册事件
} publicvoidvalueChanged(ListSelectionEvente){ //此处事件的方法中只需要获得用户选择的行数目即可
this.selectRow=this.table.getSelectedRow(); } publicvoideditRow(int
addOrupdate){ //自定义一个方法用来编辑行的数据,添加或者修改
} publicvoidselectData(){ //自定义的一个方法用来显示查找的结果
} publicvoidactionPerformed(ActionEvente){ //处理按钮的点击事件
} publicstaticvoidmain(String
args[]){ newMessageListApp(); } }(3)界面主体设计(3)定义本通讯录的全局对象;JTabletable;
DefaultTableModel
defaultModel;//用来构造JTable
ListSelectionModel
selectionMode;//用来注册事件的ListSelectionModel
JScrollPane
scrollPane; //存放JTable
JPanelpanel; //存放四个操作按钮的面板
JButtonbutton; //用来进行操作的按钮
int
selectRow=0;//保存选择列的变量以对该列进行操作,默认是第一列 (4)添加组件的方法并初始化JTable数据,注册事件;
publicvoidaddItem(){ String[]name={"姓名","性别","年龄","住址","联系方式"}; //初始数据
Stringdata[][]= { {"张三","男","30","北京",}, {"马六","男","25","上海","156784593456"}, {"马华","女","23","哈尔滨",}, {"Jone","男","24","青岛",} };
defaultModel=newDefaultTableModel(data,name); table=newJTable(defaultModel);
table.setPreferredScrollableViewportSize(newDimension(400,80));
selectionMode=table.getSelectionModel();
selectionMode.addListSelectionListener(this);
scrollPane=newJScrollPane(table);panel=newJPanel();button=newJButton("增加");
panel.add(button);
button.addActionListener(this);button=newJButton("删除");
panel.add(button);
button.addActionListener(this);button=newJButton("修改");
panel.add(button);button.addActionListener(this);button=newJButton("查找");
panel.add(button);
button.addActionListener(this);ContainercontentPane=this.getContentPane();
contentPane.add(scrollPane,BorderLayout.CENTER);
contentPane.add(panel,BorderLayout.SOUTH); }(5)行编辑(5)实现定义的editRow()方法用来对每行数据进行编辑,如添加、修改等;
publicvoideditRow(int
addOrupdate){ //如果是修改,则先删除该记录,之后再新添一条
if(addOrupdate>=0){
defaultModel.removeRow(addOrupdate); } Strings[]=newString[5]; s[0]=JOptionPane.showInputDialog(this,"请输入姓名:"); s[1]=JOptionPane.showInputDialog(this,"请输入性别
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025小学二年级学习计划(32篇)
- 技术顾问劳务合同(3篇)
- 施工合同书(32篇)
- 2024-2025学年广东省深圳市龙岗区德琳学校高二上学期第一次考试历史试卷
- 2024-2025学年第15课货币的使用与世界货币体系的形成-勤径学升高中历史选择性必修1同步练测(统编版2019)
- 2025年协同开发建房协议版式
- 2025年农业合作养殖协议模版
- 2025年供应链优化供应商协议
- 2025年双方合作演艺协议
- 2025年交易合同附加条件标准文本
- 徐金桂行政法讲义
- 诺如病毒-感染性腹泻预防控制知识课件
- 2022建筑外门窗三性讲义精选ppt
- 医疗器械供货企业质量保证体系调查表(模板)
- 春节后复工安全检查表
- 管道公称直径壁厚对照表
- 项城市2021年度农业水价综合改革
- 工程伦理-第章工程与伦理通用PPT课件
- 我眼中的中国发展(课堂PPT)
- 稻谷品质测定指标及方法
- 公司面试评价表
评论
0/150
提交评论