购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 主窗体设计

主窗体是程序运行过程中必不可少的部分,它是用户与程序交互的关键界面。主窗体上方有一个工具栏,用户可以通过单击该工具栏中的按钮来切换不同的功能面板。工具栏中的按钮以图标形式展示,当鼠标悬停在按钮上时,可弹出文字提示。工具栏中的按钮功能从左至右依次为:打开图片文件、保存图片文件、旋转图片、翻转图片、裁剪图片、添加文字水印、添加图片水印、变为黑白图片、添加马赛克、将图片变的透明。

主窗体的效果如图3.3所示。

图3.3 主窗体的效果图

MainFrame类是项目中的主窗体类,它继承自JFrame窗体类。创建MainFrame类对象并调用其setVisible()方法将显示状态设为true即可打开主窗体。

MainFrame类包含的属性和方法比较多,下面分别进行介绍。

(1)主窗体在类属性中定义了窗体内的主要组件,这些组件包括窗体中央面板、面板所使用的布局对象和窗体上方的工具栏,代码如下:

工具栏中有10个按钮组件,代码如下:

(2)主窗体构造方法中定义了窗体的宽高、在屏幕中的坐标等属性,同时又调用init()初始化方法和addListener()添加监听方法,这两个方法讲后面介绍。构造方法的代码如下:

(3)init()方法用于为所有窗体组件进行初始化操作。通过getContentPane()方法获得的主容器对象默认使用边界布局,因此直接可以将工具栏放到边界布局的北部,同时将中央面板放到边界布局的中央位置。每个按钮在初始化之后都会添加图片和鼠标悬停提示,而每个功能按钮还会添加动作命令,用于在动作事件中进行区分。在构造方法的末尾处,首先让中央面板采用卡片布局;然后通过PanelFactory面板工厂类获取所有功能面板对象,并依次添加到主面板中,使用cardLayout卡片布局对象来控制显示哪个面板;最后在主面板中添加成员内部类(DrawImagePanel面板类对象)作为窗体展示的默认面板。

构造方法的代码如下:

说明

当使用边界布局管理器向容器中添加组件时:如果不指定要把组件添加到哪个区域,那么当前组件会被默认添加到CENTER区域;如果向同一个区域中添加多个组件,那么后放入的组件会覆盖先放入的组件。

(4)构造方法中调用的DrawImagePanel类是主窗体类的一个成员内部类,它继承自JPanel面板类。DrawImagePanel面板只用于显示程序默认背景图片。在paint()绘图方法中,绘制的背景图片宽度和高度为面板的宽度和高度,这样即使面板大小发生变化,背景图片也会相应调整,始终填满整个面板。DrawImagePanel类的代码如下:

(5)构造方法调用的addListener()方法中写了所有按钮的监听。除了“打开”按钮和“保存”按钮的逻辑稍微复杂,其他功能按钮都是切换中央面板中的功能面板。

“打开”按钮是用户首先使用的功能,只有通过该按钮导入图片文件之后,其他按钮才可以正常使用。单击“保存”按钮后会弹出一个文件选择器,文件选择器根据过滤器会自动滤出后缀名为“.jpg”和“.png”的文件。当用户选中一个图片文件并单击文件选择对话框上的“打开”按钮后,程序会将图片文件中的内容转为一个BufferedImage图片对象,并将该图片对象交给MyImage类作为待处理图片保存起来,同时在窗体标题上展示图片文件地址,最后触发“旋转”按钮的单击事件,直接切换到翻转图片功能面板。

为“打开”按钮添加动作事件的代码如下:

(6)“保存”按钮与“打开”按钮的使用方法是类似的,但它们的功能相反。在程序已经读取过某张图片文件之后,“保存”按钮才能被激活。当用户单击“保存”按钮时,也可以打开一个文件选择器,但这个文件选择器返回的是图片要保存的位置。程序默认将图片保存为.png格式。

为“保存”按钮添加动作事件的代码如下:

(7)除了“打开”按钮和“保存”按钮,工具栏上还有8个功能按钮,这些功能按钮的作用是切换中央面板中显示的不同功能面板。由于这8个按钮的功能基本类似,因此为它们提供一个通用的动作事件处理方法——buttonAction()方法。buttonAction()方法的参数是ActionEvent动作事件,通过这个动作事件对象可以获取被单击按钮的一些属性,例如getActionCommand()方法可以返回动作指令,通过动作指令就可以分区这些按钮。当功能按钮被单击时,调用卡片布局对象的show()方法就可以实现切换功能界面的效果。buttonAction()方法的代码如下:

(8)在addListener()方法中为这8个功能按钮添加动作事件监听器,每个按钮都触发buttonAction()方法,代码如下: MN9Lwo8y6+9NYHis+O3jTwhAUtjg5eKWK7AqDfb86maaDRd6+Q+2Et6rzqD2FEBj

点击中间区域
呼出菜单
上一章
目录
下一章
×