Java Swing 图像查看器实战解析:菜单组件与事件处理
一、原题完整代码呈现
以下是计算机二级Java考试中关于Swing界面开发的综合题型,涉及窗口显示、菜单创建、文件选择及组件交互,包含5处需要填写的空白(标记为//*********Found**********
):
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class Java_3
{
public static void main(String[] args)
{
JFrame frame = new ImageViewerFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//*********Found**********
frame.setVisible(_________);
}
}
class ImageViewerFrame extends JFrame
{
private JLabel label;
private JLabel labelT;
private JFileChooser chooser;
private JComboBox faceCombo;
private static final int DEFAULT_SIZE = 24;
public static final int DEFAULT_WIDTH = 570;
public static final int DEFAULT_HEIGHT = 400;
public ImageViewerFrame()
{
setTitle("ImageViewer");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
label = new JLabel();
Container contentPane = getContentPane();
contentPane.add(label,BorderLayout.CENTER);
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
//*********Found**********
JMenu menu = new JMenu("__________");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("Open");
//*********Found**********
_______________.add(openItem);
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
int r = chooser.showOpenDialog(null);
if(r == JFileChooser.APPROVE_OPTION)
{
//*********Found**********
String name = __________________.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
}
});
labelT = new JLabel("红军不怕远征难");
labelT.setFont(new Font("隶书", Font.PLAIN, DEFAULT_SIZE));
contentPane.add(labelT, BorderLayout.NORTH );
faceCombo = new JComboBox();
faceCombo.setEditable(true);
faceCombo.addItem("隶书");
faceCombo.addItem("华文新魏");
faceCombo.addItem("华文行楷");
faceCombo.addItem("华文隶书");
faceCombo.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
//*********Found**********
labelT.setFont(new Font((String)____________________.getSelectedItem(),
Font.PLAIN, DEFAULT_SIZE));
}
});
JPanel comboPanel = new JPanel();
comboPanel.add(faceCombo);
contentPane.add(comboPanel, BorderLayout.SOUTH);
}
}
二、空白处逐一解析与解答
1. 第一处空白:设置窗口可见性
答案:true
//*********Found**********
frame.setVisible(true);
解析:
Swing窗口(JFrame
)默认处于不可见状态,需调用setVisible(boolean visible)
方法设置为可见。参数true
表示显示窗口,false
表示隐藏,因此填写true
。
2. 第二处空白:创建文件菜单
答案:File
//*********Found**********
JMenu menu = new JMenu("File");
解析: JMenu
表示菜单组件,此处创建的菜单用于包含“Open”(打开)菜单项,属于文件操作相关功能,约定菜单名称为“File”(文件),因此填写File
。
3. 第三处空白:将菜单项添加到菜单
答案:menu
//*********Found**********
menu.add(openItem);
解析: openItem
是JMenuItem
(菜单项)对象,需要添加到JMenu
(菜单)中才能显示。前面已创建menu
对象,通过menu.add(openItem)
将菜单项添加到菜单,因此填写menu
。
4. 第四处空白:获取选中的文件路径
答案:chooser
//*********Found**********
String name = chooser.getSelectedFile().getPath();
解析: chooser
是JFileChooser
(文件选择器)对象,showOpenDialog
方法弹出文件选择窗口后,通过chooser.getSelectedFile()
可获取用户选中的文件对象,再调用getPath()
获取文件路径,因此填写chooser
。
5. 第五处空白:获取下拉框选中的字体名称
答案:faceCombo
//*********Found**********
labelT.setFont(new Font((String)faceCombo.getSelectedItem(),
Font.PLAIN, DEFAULT_SIZE));
解析: faceCombo
是JComboBox
(下拉框)对象,用于选择字体名称(如“隶书”“华文新魏”)。getSelectedItem()
方法返回选中的项(字符串类型),作为字体名称参数,因此填写faceCombo
。
三、完整正确代码
四、程序功能与运行说明
程序功能
该程序是一个简单的图像查看器,集成了文件操作和字体设置功能,核心功能包括:
- 窗口布局:使用
BorderLayout
布局管理器,分为北(文本)、中(图像)、南(字体选择)三个区域 - 文件菜单:通过“File”菜单的“Open”项打开文件选择器,选择图像文件并在中央区域显示
- 字体设置:底部下拉框选择字体,实时修改顶部文本的字体样式
运行说明
程序启动后,显示标题为“ImageViewer”的窗口:
- 顶部(NORTH):显示文本“红军不怕远征难”(默认字体为隶书)
- 中央(CENTER):初始为空,用于显示选中的图像
- 底部(SOUTH):包含字体选择下拉框(选项为“隶书”“华文新魏”等)
操作流程:
- 打开图像:点击窗口顶部菜单栏的“File”→“Open”,在弹出的文件选择器中选择图像文件(如.jpg、.png),中央区域会显示该图像
- 更换字体:在底部下拉框中选择其他字体(如“华文新魏”),顶部文本的字体会实时更新
- 退出方式:点击窗口右上角关闭按钮,程序正常退出
五、核心知识点总结
Swing窗口基础
- 窗口可见性:
setVisible(true)
是显示窗口的必要操作(默认不可见) - 关闭行为:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
设置点击关闭按钮时退出程序(否则窗口关闭但程序可能继续运行) - 布局管理器:
BorderLayout
将容器分为5个区域(东、南、西、北、中),适合整体布局规划
- 窗口可见性:
菜单组件体系
组件层次:
JMenuBar
(菜单栏)→JMenu
(菜单)→JMenuItem
(菜单项),需按层次添加:JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); // 为窗口设置菜单栏 JMenu menu = new JMenu("File"); menuBar.add(menu); // 菜单栏添加菜单 JMenuItem openItem = new JMenuItem("Open"); menu.add(openItem); // 菜单添加菜单项
- 事件处理:为菜单项绑定
ActionListener
,在actionPerformed
中实现打开文件逻辑
文件选择器(JFileChooser)
核心方法:
showOpenDialog(Component parent)
:弹出打开文件对话框,返回用户操作结果(JFileChooser.APPROVE_OPTION
表示确认选择)getSelectedFile()
:获取用户选中的文件对象getPath()
:获取文件的路径字符串
- 应用场景:用于让用户可视化选择文件,避免手动输入路径的繁琐和错误
下拉框(JComboBox)与字体设置
- 下拉框功能:
JComboBox
用于提供可选列表,addItem()
添加选项,getSelectedItem()
获取选中项 - 字体设置:
Font
类用于定义字体(名称、样式、大小),通过JLabel.setFont(Font)
实时更新文本样式 - 事件响应:为下拉框绑定
ActionListener
,选中项变化时触发事件,更新字体
- 下拉框功能:
六、常见错误与应试技巧
常见错误分析
- 第一处空白可见性参数错误:写成
false
(窗口无法显示)或1
(参数类型错误,需boolean类型) - 第二处空白菜单名称错误:写成“打开”(中文名称不符合常规命名习惯)或“Edit”(与功能不符)
- 第三处空白添加对象错误:写成
menuBar.add(openItem)
(菜单项直接添加到菜单栏,不符合层次结构) - 第四处空白文件选择器错误:写成
file
(未定义的变量)或openItem
(菜单项无getSelectedFile
方法) - 第五处空白下拉框对象错误:写成
comboPanel
(面板无getSelectedItem
方法)或labelT
(标签无该方法)
- 第一处空白可见性参数错误:写成
应试技巧
- 窗口显示口诀:“Swing窗口要显示,setVisible(true)别忘记,关闭操作要设置,EXIT_ON_CLOSE保退出”
- 菜单层次:“菜单栏装菜单,菜单装菜单项,一层一层往上添”
- 文件选择:“JFileChooser选文件,showOpenDialog弹窗口,approve后getSelectedFile”
- 组件交互:“下拉框选值用getSelectedItem,字体更新靠setFont,事件监听实时变”
通过本题,我们掌握了Swing中窗口管理、菜单系统、文件选择器及下拉框的综合应用,理解了事件驱动模型在界面交互中的核心作用。这类综合题型贴近实际应用场景,对开发桌面应用的界面逻辑具有重要参考价值。