Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java Swing 图像查看器实战解析:菜单组件与事件处理

阿贵
2天前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年08月31日,已超过2天没有更新,若内容或图片失效,请留言反馈。

Java Swing 图像查看器实战解析:菜单组件与事件处理

76.png
77.png

一、原题完整代码呈现

以下是计算机二级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);

解析
openItemJMenuItem(菜单项)对象,需要添加到JMenu(菜单)中才能显示。前面已创建menu对象,通过menu.add(openItem)将菜单项添加到菜单,因此填写menu

4. 第四处空白:获取选中的文件路径

答案:chooser

//*********Found**********
String name = chooser.getSelectedFile().getPath();

解析
chooserJFileChooser(文件选择器)对象,showOpenDialog方法弹出文件选择窗口后,通过chooser.getSelectedFile()可获取用户选中的文件对象,再调用getPath()获取文件路径,因此填写chooser

5. 第五处空白:获取下拉框选中的字体名称

答案:faceCombo

//*********Found**********
labelT.setFont(new Font((String)faceCombo.getSelectedItem(),
   Font.PLAIN, DEFAULT_SIZE));

解析
faceComboJComboBox(下拉框)对象,用于选择字体名称(如“隶书”“华文新魏”)。getSelectedItem()方法返回选中的项(字符串类型),作为字体名称参数,因此填写faceCombo

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序是一个简单的图像查看器,集成了文件操作和字体设置功能,核心功能包括:

  1. 窗口布局:使用BorderLayout布局管理器,分为北(文本)、中(图像)、南(字体选择)三个区域
  2. 文件菜单:通过“File”菜单的“Open”项打开文件选择器,选择图像文件并在中央区域显示
  3. 字体设置:底部下拉框选择字体,实时修改顶部文本的字体样式
运行说明
  1. 程序启动后,显示标题为“ImageViewer”的窗口:

    • 顶部(NORTH):显示文本“红军不怕远征难”(默认字体为隶书)
    • 中央(CENTER):初始为空,用于显示选中的图像
    • 底部(SOUTH):包含字体选择下拉框(选项为“隶书”“华文新魏”等)
  2. 操作流程:

    • 打开图像:点击窗口顶部菜单栏的“File”→“Open”,在弹出的文件选择器中选择图像文件(如.jpg、.png),中央区域会显示该图像
    • 更换字体:在底部下拉框中选择其他字体(如“华文新魏”),顶部文本的字体会实时更新
  3. 退出方式:点击窗口右上角关闭按钮,程序正常退出

五、核心知识点总结

  1. Swing窗口基础

    • 窗口可见性:setVisible(true)是显示窗口的必要操作(默认不可见)
    • 关闭行为:setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)设置点击关闭按钮时退出程序(否则窗口关闭但程序可能继续运行)
    • 布局管理器:BorderLayout将容器分为5个区域(东、南、西、北、中),适合整体布局规划
  2. 菜单组件体系

    • 组件层次: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中实现打开文件逻辑
  3. 文件选择器(JFileChooser)

    • 核心方法:

      • showOpenDialog(Component parent):弹出打开文件对话框,返回用户操作结果(JFileChooser.APPROVE_OPTION表示确认选择)
      • getSelectedFile():获取用户选中的文件对象
      • getPath():获取文件的路径字符串
    • 应用场景:用于让用户可视化选择文件,避免手动输入路径的繁琐和错误
  4. 下拉框(JComboBox)与字体设置

    • 下拉框功能:JComboBox用于提供可选列表,addItem()添加选项,getSelectedItem()获取选中项
    • 字体设置:Font类用于定义字体(名称、样式、大小),通过JLabel.setFont(Font)实时更新文本样式
    • 事件响应:为下拉框绑定ActionListener,选中项变化时触发事件,更新字体

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白可见性参数错误:写成false(窗口无法显示)或1(参数类型错误,需boolean类型)
    • 第二处空白菜单名称错误:写成“打开”(中文名称不符合常规命名习惯)或“Edit”(与功能不符)
    • 第三处空白添加对象错误:写成menuBar.add(openItem)(菜单项直接添加到菜单栏,不符合层次结构)
    • 第四处空白文件选择器错误:写成file(未定义的变量)或openItem(菜单项无getSelectedFile方法)
    • 第五处空白下拉框对象错误:写成comboPanel(面板无getSelectedItem方法)或labelT(标签无该方法)
  2. 应试技巧

    • 窗口显示口诀:“Swing窗口要显示,setVisible(true)别忘记,关闭操作要设置,EXIT_ON_CLOSE保退出”
    • 菜单层次:“菜单栏装菜单,菜单装菜单项,一层一层往上添”
    • 文件选择:“JFileChooser选文件,showOpenDialog弹窗口,approve后getSelectedFile”
    • 组件交互:“下拉框选值用getSelectedItem,字体更新靠setFont,事件监听实时变”

通过本题,我们掌握了Swing中窗口管理、菜单系统、文件选择器及下拉框的综合应用,理解了事件驱动模型在界面交互中的核心作用。这类综合题型贴近实际应用场景,对开发桌面应用的界面逻辑具有重要参考价值。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论