当前课程知识点:Java程序设计 > 第七章 图形用户界面 > 7.10-中间层容器(二) > 7.10-中间层容器(二)
大家好
欢迎回来继续学习Java语言程序设计
这一节我们来
继续学习中间层的容器
现在我们首先来看这么个示意图
这样的结构的窗口
我相信大家在
用一些图形界面的软件中都遇到过
一个窗口被从中间
分成左右两个部分
每个部分是呈现不同的内容
那么但是往往
这左右两个部分中间
它们的操作又是有一定的联系的
比如说我在左边的列表中
选一个图形文件的名字
右边就会展示这个图形
那么这个就要用JSplitPane来实现
使用JSplitPane
我们就可以把两个组件
显示在两个区域内
中间有条分割线
我们可以拖动中间这条分割线
就可以改变左右两边的
这个组件的大小
当然这个分割线不一定
一定是分左右的
也可以是水平的分割线
把区域分成上下
两个部分也是可以的
这个大家在设置SplitPane的时候
可以去设置
由于一个窗口的区域
被分成两个部分以后
那么往往每个部分就更小了
这个时候可能你东西太多
放不下的情况就会更多的发生
怎么办
往往我们是先把组件
放在带滚动条的这个ScrollPane里面
然后再将ScrollPane
放到SplitPane里面
这样在每部分窗口中
都可以拖动滚动条
看到组件里面的全部内容
这个表中给出了
JSplitPane的常用API供大家参考
下面我们就来看一下
像这样一个窗口左边是列表
右边显示图片这是怎么实现的
我们来看看这个例题的代码实现
接下来我们就来看
这个刚才这个示意图里面的
左右分两个区域
左边列出图像的列表
右边显示图像
还都可以滚动是怎么实现的
首先就需要准备
一个properties文件
这个properties文件
实际上就是一个纯文本文件
我们看到里面
有这个images这个内容
images等于号后面
就是列出了这些
我们准备好的图形文件的文件名
如果是在当前工作目录下
你就写文件名就行了
如果是在当前
工作目录的下级子目录下
你就要写相对的目录名
要放在里面
或者你写全路径名
放在里面都可以
所以你就列出所有的
你要展示的这些图形的文件名
列出来
放在这样一个
properties文件里面
纯文本文件这个要准备好
接下来我们在程序中
会看到怎么用它
好
那我们来看这个
class SplitPaneDemo
它实现了ListSelectionListener
也就是我们选择了
List里边的某个项以后
就会触发当前对象
自己的事件响应代码
我们来看在这个构造方法里面
首先就有这样一个getBundle
ResourceBundle.getBundle
调用这个getBundle方法
大家看这个参数是什么imagenames
那不就是刚才我们准备好的
这个properties文件的文件名吗
对
就是这个文件名
这样的话这个getBundle方法
就会从这个文件中
取出你写好的这些内容
取出写好的这些内容
然后我们要一项一项
把它那些项分辨出来
怎么办呢
我们就可以用get String images
images是什么
不就是一开始前面
我们这个项的名字吗
images
等于后面这一大串字符串
那么这个get String
就把image后面这一大串内容
当做一个字符串取回了
当做一个字符串取出来了
取出来以后我们还需要
把它分解成
一个一个的图像文件名
那么就用这个parseList
parseList是我们
自己写的一个方法
在这后面这是parseList
它返回的就是一个Vector
实际上就是在这里面分解出
用空格分隔的一个个字符串
我们看这用的
是String Tokenizer方法
用String Tokenizer
那么它的分隔符是空格
就是用空格作为分隔符
分解出一个一个来
你看构造了这个
String Tokenizer以后
用它的hasMoreTokens
就往下一个一个找nextToken
就将一个一个的文件名分解出来了
然后就这些文件名添加到
这个Vector向量里面去
这样的向量就容纳了
所有的这些图像文件的文件名
所以在ParseList这个方法返回
就是一个Vector
好
那么这些由于有可能发生异常
所以都放在try里面了
如果发生异常就进入catch块
给出各种的错误信息
这个就不仔细去看它了
接下来我们就要
将取到的这些文件名的
这个序列放到一个List里面去
所以在这儿要构造这个List
我们构造一个JList
它的参数就是刚才我们
分解出来的那些文件名的序列
然后呢这个LIST的内容有了
还要设置它的选择模式是单选
因为List是允许
有的它是允许多选的
这个single selection是单选的
然后默认是index里
应默认是最开头的那个是被选中
然后将当前对象
自己作为事件监听器添加上去
然后再将这个List
加到ScrollPane上面去
好
接下来就是要准备
这是左边那个List准备好了
放到ScrollPane上还可以滚动了
接下来该准备
右边的图形的区域了
那就是右边实际上是一个Label
我们就要设置右边Label了
那么实际上是构造了一个JLabel
那一开始展现给用户的
总要有第一个图吧
那么我们就设置一下
它的第一个图放在那儿去
然后设置一下大小
然后也是要把它
放到ScrollPane上面
所以我们来看你用一个JScrollPane
然后将这个图
放图形的这个Label作为参数
这样右边的这个Label
也放到滚动的ScrollPane上面了
接下来就要构造这个左右
分两个区域的SplitPane
构造SplitPane然后
让它左右分两边
然后但是也要告诉它
左边放什么组件右边放什么组件
左边就是这个ListScrollPane
右边就是pictureScrollPane
都放上去了
放上去再做好相关的设置
好
那我们来看这个事件响应
这个valueChanged
如果说你选了一个List里面的一项
一个图形文件名
那么就是你选项的状态就改变了
选项的状态就改变了
那么这个时候就进到这里面来
它就有一个ListSelectionEvent
那我们就进到这个响应程序里面来
然后就要去找要显示的对象
要找要显示的对象
找不到的情况不说
我们说如果说能够找到的话
我们就看就是getSelectedIndex
它是第几个
然后用这个Index去找到
你这个Image Icon里面
就是你的图像列表里面
它是第几个就把它找出来
这是找出来的东西实际上
因为它直接就是文件名了
那我们就setIcon
就将这个图形就放到
那个picture Label上面去了
然后再设置一下相关的大小参数
让它可见
那么在主方法中比较简单
构造一个JFrame
有关闭的设置
然后再构造一个SplitPaneDemo
这个SplitPane要加到
当前的contentPane上面去
所以我们要get contentPane
然后把它添加上去
把它大小调合适
变成可见的就行了
所以这个例子我们就看到
整个回顾一下这个步骤
就是要准备好
这个properties文件
列出你在列表中要列的文件名
也就是你要在右边显示的
那些图像的文件名
作为字符串都列出来
每个文件名之间空格分隔
可以包含路径名
然后在这里面我们要构造
这个左边的列表的时候
就要去这个properties文件里面
把这个字符串取出来
然后再给它
分解成一个个的文件名
放在一个Vector里面
用这个Vector就构造一个List
把这个List
放在一个SplitPane上面
那么右边做一个放图形的Label
也把它放在ScrollPane上面
然后左边你选择了
某一个List项以后
就触发了选项状态更改的事件
然后就会去
进到事件响应程序里面
看你选的是哪一个
然后就把相应的文件名取出来
然后把这个文件代表
这个文件名就用setIcon
就把这个图像设置到
这个图形的Label上面了
那么这个就是左右的
我们看看它的联动了
你选一个什么显示一个什么
如果我们在一个窗口中
有几项功能
那么怎么样能够把它放得下呢
地方有限
这时候我们就可以
给每项功能加一个标签
当我们点选不同标签的时候
不同的卡片显示到前面来
这个就是JTappedPane的功能
这个表中给出了
JTappedPane的常用API
供大家参考
我们还可以用JToolBar
将一些常用功能用工具栏来表示
这个表中给出了
JToolBar的常用的API
供大家参考
现在我们来看一下
这个ToolBar的
这个例题的源代码
在这个例题运行的时候
我们会看到它实际上是两个部分
上面是工具条
然后下面是一个文本区
工具条里面会有几个按钮
点不同的按钮文本区
显示不同的文字
所以首先我们来看
在它的构造方法中
要准备好这个JToolBar
构造一个JToolBar
然后要调用另外一个方法
addButtons
将几个按钮
都添加到ToolBar上面去
添加按钮这个事情
一会儿我们再往后看
接下来下一件事情
就是准备好这个文本区
要改造一个JTextArea
就是点不同的按钮
文本区会显示不同的文字
一行一行一行文字往下显示
你点一块按钮显示一行文字
那么文字多了放不下
它会滚动吧
所以需要放在一个
滚动的ScrollPane里面去
所以把这个文本区
添加到ScrollPane里面去
然后进行一下布局
布局的东西就不详细去看了
好
接下来再看这个addButtons
将这个按钮添加上去
首先看这个第一个按钮添加
构造一个JButton
然后每一个按钮上
它实际上是
要有一个图标放在按钮上面的
那我们就把这个图标的
全路径名文件名写在这儿
你用imageIcon
然后把它放在这个按钮上
那接下来还要
设置这个setToolTip
就是当你鼠标指向这按钮的时候
它要有一个提示信息弹出来
那么用setToolTipText来设置这个
然后接下来就是注册事件监听器
这个事件监听器
是一个匿名内部类的对象
实现了ActionListener的
匿名内部类的对象
那么它就是实现了
其中的ActionPerformer的方法
这个ActionPerformer方法
就是调用这个displayResult去显示
Action for first button这一行文本
等一会儿我们
再看这个displayResult这个方法
然后这第一个按钮构造好了以后
要添加到ToolBar上面去
同样的道理构造第二个按钮
设置它的提示文字
以及当点这个按钮的时候
响应的动作是
要显示Action for second button
这个然后第二个按钮
添加到ToolBar上面去
同样的道理把第三个按钮
构造好设置好
添加到ToolBar上面去
然后再看这个displayResult
是怎么样把文字
显示在文本区域呢
是调用这个textArea
它的append方法
这样就将你指定的这个字符串
参数字符串显示上去了
然后再加一个换行
以便下一次在显示文字的时候
显示在下一行上面
主方法很简单
就构造一个ToolBarDemo对象
就可以了
然后把大小调合适变成可见
有时候呢
我们希望在一个主窗口中呢
打开多个子窗口
比如说打开多个文档
那这个怎么实现呢
这时候就需要用JInteralFrame
使用JInteralFrame就可以实现
在一个主窗口中打开多个文档
每个文档各自占用一个新的窗口
但是它们都在主窗口的内部
这JInteralFrame的使用
跟JFrame几乎一样的
可以最大化
最小化管理窗口加入菜单
那JInteralFrame
它是轻量级的组件
这一点它跟JFrame不一样
它呢只能是中间的容器
必须依附于顶层容器之上
通常我们也会将JInteralFrame
加入JDesktopPane来管理
JDesktopPane类继承自JLayeredPane
是用来建立虚拟桌面的
它可以显示并且管理
众多的InteralFrame之间的层次关系
这个表中就给出了
JInteralFrame的常用API
现在我们就来看一下
这个例题源代码
看一下在一个
应用程序的主窗口中
怎么样通过菜单命令
来打开多个子窗口
首先这个应用程序
还是需要一个JFrame
所以它自己就扩展了JFrame
然后呢这个子窗口
都是放在这个DesktopPane上面的
这样的话便于管理和拖拽的速度
这些都比较快
所以都放在DesktopPane上面
一些其他的准备
我们就不仔细看了
现在我们来看
来首先看要构造一个DesktopPane
用了一个JDesktopPane对象
这是一个有层级的这样一个Panel
然后调用了一个
我们自己写的方法
createFrame这就是
用来首先创建第一个子窗口
也就是说这个程序运行开始
马上你就看见有第一个子窗口
在主窗口里面呆着了
那我们来看一下createFrame
都做了一些什么事情
好 在这里
这里设备是构造了
一个MyInternalFrame
构造了一个内部的窗口
然后把它设置成可见的
接下来要把它
放到这个Desktop上面去
DesktopPane
把它放到这上面添加到上面去
然后这个窗口
让它默认是被选中的
也就是默认是焦点状态
所以要设置一下Selected是true
实际上就是构造一个
Internal内部的Frame
Internal Frame
然后把它添加到DesktopPane上面
这是createFrame干的事情
好
接下来我们就将这个桌面Panel
DesktopPane
把它设置为这个顶层容器
JFrame的内容面板
所以这是setContentPane
把它设置为内容面板
然后要往上面去添加这个菜单条
所以呢要创建一个MenuBar
把它添加上去
createMenuBar添加上去
接下来我们再来看
这个创建这个菜单条
createMenuBar
是构造一个JMenuBar
名字这个菜单叫Document
然后底下设置了不同的菜单项
菜单项还设置了这个热键
好
那么我们将这个菜单项添加进去
添加上去
如果说我们将来选择的是new
那就会打开一个新的窗口
好
这样我们将这个menuItem
添加到menu上面
再将menu添加到MenuBar上面
这是我们就创建好了一个MenuBar
所以这个就将添加了菜单
和菜单项的这个菜单条MenuBar作为返回值返回
返回了以后我们看在这儿
就要将MenuBar
将这个MenuBar设置
到当前的窗口里面来
好
那接下来我们还要
看它的事件响应程序
如果是选择的new
那我们就要看开一个新窗口
新的内部子窗口
那看这个事件监听器里面
它覆盖了ActionPerformed的
这又是一个用匿名
内部类对象做的事件监听器
它的ActionPerformed方法
就是调用creatFrame
就是刚才我们看到的
去开一个新的内部的窗口
所以这个例子就很简单
展示了我们怎么样
用这个InternalFrame
在一个外部的主窗口
一个JFrame里面开多个子窗口
在这一节我们了解了JSplitPane
JTappedPane还有工具栏JToolBar
以及JInternalFrame
好
这一节的内容就是这些
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件