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

Java Swing 界面交互实战解析:窗口继承与事件监听

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

Java Swing 界面交互实战解析:窗口继承与事件监听

80.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于Swing窗口设计、组件添加及事件处理的综合题型,主要考察类继承、容器组件管理、接口实现及事件方法重写,包含4处需要填写的空白(标记为//*********Found**********):

import java.awt.event.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;

public class Java_3
{
   public static void main(String[] args)
   {
      FontFrame frame = new FontFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

//*********Found**********
class FontFrame extends ________________
{
   public FontFrame()
   {
      setTitle("北京 2008");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      FontPanel panel = new FontPanel();
      Container contentPane = getContentPane();
      //*********Found**********
      contentPane.add(_____________________);
   }
   public static final int DEFAULT_WIDTH = 400;
   public static final int DEFAULT_HEIGHT = 250;
}

class FontPanel extends JPanel
{
   public FontPanel()
   {
      JButton yellowButton = new JButton("Yellow");
      JButton blueButton = new JButton("Blue");
      JButton redButton = new JButton("Green");
      add(yellowButton);
      add(blueButton);
      add(redButton);
      ColorAction yellowAction = new ColorAction(Color.YELLOW);
      ColorAction blueAction = new ColorAction(Color.BLUE);
      ColorAction greenAction = new ColorAction(Color.GREEN);
      yellowButton.addActionListener(yellowAction);
      blueButton.addActionListener(blueAction);
      redButton.addActionListener(greenAction);
   }
   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D)g;
      String message = "同一个世界,同一个梦想!";
      Font f = new Font("隶书", Font.BOLD, 27);
      g2.setFont(f);
      FontRenderContext context = g2.getFontRenderContext();
      Rectangle2D bounds = f.getStringBounds(message, context);
      double x = (getWidth() - bounds.getWidth()) / 2;
      double y = (getHeight() - bounds.getHeight()) / 2;
      double ascent = -bounds.getY();
      double baseY = y + ascent;
      g2.setPaint(Color.RED);
      g2.drawString (message, (int)x, (int)(baseY));
   }
   //*********Found**********
   private class ColorAction ____________________ ActionListener
   {
      public ColorAction(Color c)
      {
         BackgroundColor = c;
      }
      //*********Found**********
      public void _____________________ (ActionEvent event)
      {
         setBackground(BackgroundColor);
      }
      private Color BackgroundColor;
   }
}

二、空白处逐一解析与解答

1. 第一处空白:FontFrame 继承的窗口类

答案:JFrame

//*********Found**********
class FontFrame extends JFrame

解析
FontFrame是程序的主窗口类,需要具备窗口的基本功能(如设置标题、大小、关闭操作等)。Swing中顶级窗口的基类是JFrame,通过继承JFrame可直接复用其窗口管理功能,因此填写JFrame

2. 第二处空白:向内容面板添加面板组件

答案:panel

//*********Found**********
contentPane.add(panel);

解析
contentPaneFontFrame的内容面板(通过getContentPane()获取),用于承载界面组件。前面已创建FontPanel panel实例(自定义面板,包含按钮和绘图逻辑),需通过add()方法将其添加到内容面板中才能显示,因此填写panel

3. 第三处空白:ColorAction 实现的事件接口

答案:implements

//*********Found**********
private class ColorAction implements ActionListener

解析
ColorAction是处理按钮点击事件的内部类,需实现ActionListener接口(Swing中处理动作事件的标准接口)。接口通过implements关键字实现,因此填写implements

4. 第四处空白:重写的事件处理方法

答案:actionPerformed

//*********Found**********
public void actionPerformed (ActionEvent event)

解析
ActionListener接口要求实现actionPerformed(ActionEvent event)方法,该方法是事件处理的核心逻辑(当按钮被点击时触发)。此处需重写该方法以实现面板背景色的修改,因此填写actionPerformed

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序是一个具有交互功能的Swing界面,核心功能包括:

  1. 主窗口(FontFrame)显示标题“北京 2008”,包含一个自定义面板(FontPanel
  2. FontPanel中:

    • 顶部显示居中的文本“同一个世界,同一个梦想!”(隶书、27号加粗、红色)
    • 底部有三个按钮:Yellow(黄色)、Blue(蓝色)、Green(绿色)
    • 点击按钮可切换面板的背景色(分别变为黄、蓝、绿色)
运行说明
  1. 程序启动后,显示一个400x250像素的窗口,标题为“北京 2008”:

    • 窗口中央显示红色文本“同一个世界,同一个梦想!”
    • 窗口底部有三个按钮横向排列
  2. 交互效果:

    • 点击“Yellow”按钮:面板背景变为黄色
    • 点击“Blue”按钮:面板背景变为蓝色
    • 点击“Green”按钮:面板背景变为绿色
    • 文本始终居中显示,不受背景色影响
  3. 退出方式:点击窗口右上角关闭按钮,程序正常退出

五、核心知识点总结

  1. Swing窗口与面板的层次结构

    • 顶级窗口:JFrame是独立窗口的基类,包含标题栏、边框和内容面板
    • 内容面板:JFramegetContentPane()返回容器,所有组件需添加到该面板(而非直接添加到JFrame
    • 自定义面板:JPanel是轻量级容器,可重写paintComponent()方法实现自定义绘图(如本题的文本绘制)
  2. 组件添加与布局

    • 容器添加组件:通过add(Component c)方法将组件(如JPanelJButton)添加到容器
    • 默认布局:JPanel默认使用FlowLayout(流式布局),组件按添加顺序横向排列(如三个按钮的排列方式)
    • 布局作用:控制组件在容器中的位置和大小,无需手动计算坐标
  3. 事件处理机制

    • 核心角色:

      • 事件源:产生事件的组件(如JButton
      • 事件监听器:实现特定接口(如ActionListener)的对象,包含事件处理逻辑
      • 注册监听:通过addActionListener(Listener l)将监听器绑定到事件源
    • 工作流程:按钮被点击→触发ActionEvent→调用监听器的actionPerformed()方法→执行背景色修改逻辑
  4. 内部类的应用

    • ColorActionFontPanel的私有内部类,优势在于:

      • 可直接访问外部类的成员(如setBackground()方法)
      • 封装事件处理逻辑,使代码结构清晰
      • 每个按钮对应一个ColorAction实例,通过构造方法传入目标颜色
  5. 自定义绘图

    • 重写paintComponent(Graphics g):Swing中自定义绘图的入口方法,需先调用super.paintComponent(g)清除背景
    • 绘图上下文:Graphics2DGraphics的子类,提供更丰富的绘图功能(如设置字体、计算文本边界)
    • 文本居中:通过getStringBounds()获取文本尺寸,结合面板大小计算居中坐标((宽度-文本宽)/2(高度-文本高)/2

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白继承类错误:写成JPanel(面板非窗口,无法独立显示)或Frame(AWT类,非Swing)
    • 第二处空白添加对象错误:写成contentPane.add(FontPanel)(添加类而非实例,语法错误)或this.add(panel)(直接向FontFrame添加,不符合Swing规范)
    • 第三处空白接口实现错误:写成extendsextends用于继承类,接口需用implements
    • 第四处空白方法名错误:写成actionPerformed以外的名称(如actionPerform)或大小写错误(如ActionPerformed),导致无法正确重写接口方法
  2. 应试技巧

    • 窗口继承口诀:“主窗口继承JFrame,标题大小容易设,内容面板装组件”
    • 事件处理:“按钮点击要响应,ActionListener来实现,actionPerformed重写好,注册监听不能少”
    • 内部类使用:“事件逻辑内部类,访问外部真方便,颜色参数构造传,背景设置一键完”
    • 绘图要点:“paintComponent重写它,super调用先执行,Graphics2D功能强,文本居中算坐标”

通过本题,我们掌握了Swing中窗口与面板的层次结构、组件添加、事件处理机制(接口实现与内部类)及自定义绘图的核心逻辑。这类综合题型融合了界面设计与交互逻辑,是Java桌面应用开发的基础,对理解事件驱动编程模型具有重要意义。

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