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

Java Swing 多窗体交互实战解析:动态创建与关闭窗体

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

Java Swing 多窗体交互实战解析:动态创建与关闭窗体

38.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于Swing多窗体交互的典型题型,主要考察Swing包导入、类继承、组件添加、窗体显示及事件监听接口实现,包含5处需要填写的空白(标记为//*********Found**********):

import java.awt.*;
import java.awt.event.*;    
//*********Found**********
import ________________.swing.*;
   
//*********Found**********
public class Java_3 ___________ JPanel{     
   
  private int counter = 0;    
   
  private JButton closeAllButton;    
   
  public Java_3() {    
    JButton newButton = new JButton("New");    
    //*********Found**********
    add(______________);
    newButton.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent evt){
        CloseFrame f = new CloseFrame();    
        counter++;    
        f.setTitle("窗体 " + counter);    
        f.setSize(200, 150);    
        f.setLocation(30 * counter, 30 * counter);    
        //*********Found**********
        ____________.setVisible(true);    
        closeAllButton.addActionListener(f); 
      }  
    });
        
    closeAllButton = new JButton("Close all");    
    add(closeAllButton);    
  }      
   
  public static void main(String[ ] args) {    
    JFrame frame = new JFrame();    
    frame.setTitle("多窗体测试");    
    frame.setSize(300, 200);    
    frame.addWindowListener(new WindowAdapter() {    
      public void windowClosing(WindowEvent e) {    
        System.exit(0);    
      }    
    });    
   
    Container contentPane = frame.getContentPane();    
    contentPane.add(new Java_3());   
  
    frame.setVisible(true) ;    
  } 
} 
   
//*********Found**********
class CloseFrame extends JFrame implements ________________ {    
  public void actionPerformed(ActionEvent evt) {     
    setVisible(false);    
  }    
}

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

1. 第一处空白:导入Swing包

答案:javax

//*********Found**********
import javax.swing.*;

解析
Swing组件(如JPanelJButtonJFrame)均位于javax.swing包中。javax是Java扩展包的命名空间,此处需要完整导入Swing包以使用相关组件,因此填写javax

2. 第二处空白:类继承声明

答案:extends

//*********Found**********
public class Java_3 extends JPanel{     

解析
Java_3类需要作为面板容器添加组件(按钮),因此需要继承JPanel类。Java中类的继承使用extends关键字,表明Java_3JPanel的子类,可复用其组件容器功能。

3. 第三处空白:添加"New"按钮

答案:newButton

//*********Found**********
add(newButton);

解析
Java_3继承自JPaneladd()方法用于向面板添加组件。newButton是"New"按钮的引用,此处需要将其添加到面板才能在界面上显示,因此参数为newButton

4. 第四处空白:显示新窗体

答案:f

//*********Found**********
f.setVisible(true);    

解析
fCloseFrame类的实例(新窗体对象),setVisible(true)方法用于显示窗体。创建新窗体后,需要调用该方法使其可见,因此填写窗体引用f

5. 第五处空白:实现事件监听接口

答案:ActionListener

//*********Found**********
class CloseFrame extends JFrame implements ActionListener {    

解析
CloseFrame类需要处理"Close all"按钮的点击事件(隐藏自身窗体),因此必须实现ActionListener接口,并重写actionPerformed方法。接口实现使用implements关键字,填写ActionListener

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序实现多窗体的动态创建与批量关闭功能,核心功能包括:

  1. 主窗体包含"New"和"Close all"两个按钮
  2. 点击"New"按钮:创建新窗体,标题为"窗体 N"(N为序号),位置依次偏移,且新窗体注册到"Close all"按钮的事件监听
  3. 点击"Close all"按钮:所有通过"New"创建的窗体全部隐藏
运行说明
  1. 程序启动后,显示标题为"多窗体测试"的主窗体,包含两个按钮
  2. 点击"New"按钮:

    • 生成标题为"窗体 1"的新窗体,位置在(30,30)
    • 再次点击生成"窗体 2",位置在(60,60),以此类推
  3. 点击"Close all"按钮:

    • 所有已创建的"窗体 N"会立即隐藏(主窗体保持显示)
  4. 点击主窗体的关闭按钮,程序完全退出

五、核心知识点总结

  1. Swing组件与包结构

    • 包路径:Swing组件位于javax.swing包,需通过import javax.swing.*;导入
    • 核心容器:JPanel作为面板容器用于组织按钮,JFrame作为顶层窗体
    • 组件继承:自定义容器类通过extends JPanelextends JFrame复用容器功能
  2. 事件监听的多重应用

    • 匿名监听器:"New"按钮使用new ActionListener(){...}创建匿名内部类,处理窗体创建逻辑
    • 接口实现:CloseFrame类实现ActionListener接口,使每个窗体可响应"Close all"事件
    • 事件注册:通过closeAllButton.addActionListener(f)将新窗体注册为事件监听器,实现批量控制
  3. 多窗体管理

    • 动态创建:通过计数器counter跟踪窗体数量,设置不同标题和位置
    • 位置控制:setLocation(30 * counter, 30 * counter)使新窗体依次偏移,避免重叠
    • 批量操作:利用事件监听机制,让"Close all"按钮同时通知所有窗体执行隐藏操作
  4. 窗体生命周期控制

    • 显示窗体:setVisible(true)使窗体可见
    • 隐藏窗体:setVisible(false)使窗体不可见(并非销毁)
    • 程序退出:主窗体通过System.exit(0)确保关闭时终止程序

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白包名错误:写成javajavaxs,Swing正确包路径是javax.swing
    • 第二处空白继承关键字错误:写成implementsJPanel是类而非接口,必须用extends
    • 第三处空白组件添加错误:写成add("newButton")(加引号导致添加字符串而非按钮)
    • 第四处空白窗体引用错误:写成CloseFrame.setVisible(true)(未使用实例引用)
    • 第五处空白接口名错误:写成ActionLister(拼写错误)或WindowListener(不匹配事件类型)
  2. 应试技巧

    • Swing导入公式:import javax.swing.*;是使用Swing组件的标准导入语句
    • 继承与实现区分:"类用extends,接口用implements"
    • 组件添加原则:add(组件引用),引用必须是已创建的组件对象
    • 多窗体控制:通过事件监听将多个窗体与同一按钮绑定,实现批量操作
    • 窗体可见性:记住setVisible(true)显示、false隐藏的控制方式

通过本题,我们掌握了Swing中多窗体的创建、布局和事件联动的方法,理解了继承、接口实现和匿名内部类在GUI编程中的综合应用。这类题目在实际开发中常用于多文档界面(MDI)、工具窗口集等场景,考察对面向对象思想和事件驱动模型的掌握,是Java GUI编程的重要进阶知识点。

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