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

Java 图形绘制实战:Swing窗口与2D图形绘制全解析

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

Java 图形绘制实战:Swing窗口与2D图形绘制全解析

114.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于Swing窗口、面板组件及2D图形绘制的典型题型,主要考察包导入、窗口显示、类定义、容器获取、组件添加及面板继承,包含6处需要填写的空白(标记为//*********Found**********):

import java.awt.*;
import java.awt.geom.*;
//*********Found**********
import javax._______________.*;

public class Java_2
{
   public static void main(String[] args)
   {
      DrawFrame frame = new DrawFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//*********Found**********
      frame._______________(true);
   }
}

//*********Found**********
class ___________________ extends JFrame
{
   public DrawFrame()
   {
      setTitle("千里共婵娟");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      DrawPanel panel = new DrawPanel();
//*********Found**********
      Container contentPane = ___________________();
//*********Found**********
      contentPane.______________(panel);
   }
   public static final int DEFAULT_WIDTH = 400;
   public static final int DEFAULT_HEIGHT = 240;
}

//*********Found**********
class DrawPanel ________________________
{
   public void paintComponent(Graphics g)
   {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D)g;
      double l = 0;
      double r = 0;
      double w = 400;
      double h = 400;
      Rectangle2D re = new Rectangle2D.Double(l,r,w,h);
      g2.setPaint(Color.BLUE);
      g2.fill(re);
      double leftX = 50;
      double topY = 50;
      double width = 50;
      double height = 50;
      Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);
      Ellipse2D ellipse = new Ellipse2D.Double();
      ellipse.setFrame(rect);
      g2.setPaint(Color.YELLOW);
      g2.fill(ellipse);
   }
}

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

1. 第一处空白:Swing组件所在的包

答案:swing

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

解析
程序中使用了JFrame(窗口)、JPanel(面板)等Swing组件,这些类均位于javax.swing包下。导入该包才能正确识别这些组件,因此填写swing

2. 第二处空白:窗口显示的方法

答案:setVisible

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

解析
JFrame创建后默认不可见,需调用setVisible(true)方法使其显示在屏幕上。该方法是控制窗口可见性的核心方法,因此填写setVisible

3. 第三处空白:继承JFrame的类名

答案:DrawFrame

//*********Found**********
class DrawFrame extends JFrame

解析
类的构造方法为public DrawFrame(),根据Java类定义规则,类名必须与构造方法名一致。且该类继承JFrame以实现窗口功能,因此填写DrawFrame

4. 第四处空白:获取窗口内容面板的方法

答案:getContentPane

//*********Found**********
      Container contentPane = getContentPane();

解析
JFrame的组件需添加到内容面板(ContentPane)中,getContentPane()JFrame的方法,用于获取该容器(返回Container类型)。因此填写getContentPane

5. 第五处空白:向容器添加组件的方法

答案:add

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

解析
Container接口的add(Component comp)方法用于将组件(如DrawPanel实例panel)添加到容器中,使其在窗口中显示。因此填写add

6. 第六处空白:DrawPanel继承的父类

答案:extends JPanel

//*********Found**********
class DrawPanel extends JPanel

解析
DrawPanel用于绘图,需继承JPanel(Swing的面板组件),并通过重写paintComponent(Graphics g)方法实现自定义绘图。JPanel提供了绘图所需的基础功能,因此填写extends JPanel

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序通过Swing创建图形界面,在窗口中绘制蓝色背景和黄色圆形,核心功能包括:

  1. 创建名为“千里共婵娟”的窗口(宽400,高240)
  2. 窗口中添加自定义面板DrawPanel,作为绘图区域
  3. 在面板上绘制:

    • 蓝色矩形(覆盖整个面板,作为背景)
    • 黄色圆形(位于坐标(50,50),宽高50,模拟“月亮”)
运行说明
  1. 程序启动流程:

    • main方法创建DrawFrame窗口实例
    • 设置窗口关闭时退出程序(JFrame.EXIT_ON_CLOSE
    • 调用setVisible(true)显示窗口
  2. 窗口初始化(DrawFrame构造方法):

    • 设置窗口标题为“千里共婵娟”,大小为400×240
    • 创建DrawPanel实例panel(绘图面板)
    • 获取内容面板,将panel添加到内容面板中
  3. 绘图逻辑(DrawPanelpaintComponent方法):

    • 调用super.paintComponent(g)确保面板正确刷新
    • Graphics对象转换为Graphics2D(支持2D图形绘制)
    • 绘制蓝色背景:创建Rectangle2D(坐标(0,0),宽400,高400),设置颜色为蓝色并填充
    • 绘制黄色圆形:创建矩形框架(坐标(50,50),宽50,高50),通过Ellipse2D基于该矩形绘制圆形,设置颜色为黄色并填充
  4. 运行效果:

    • 窗口标题为“千里共婵娟”
    • 窗口背景为蓝色,左上角有一个黄色圆形(模拟月亮)

五、核心知识点总结

  1. Swing组件与包导入

    • 核心包:javax.swing包含所有Swing组件(JFrameJPanel等),需通过import javax.swing.*导入
    • 优势:Swing是Java的轻量级GUI工具包,组件跨平台一致性好,支持自定义绘图
  2. 窗口(JFrame)基本操作

    • 实例化:new JFrame()创建窗口对象,通常通过继承JFrame扩展功能
    • 核心方法:

      • setTitle(String):设置窗口标题
      • setSize(int width, int height):设置窗口大小
      • setDefaultCloseOperation(int):设置关闭行为(JFrame.EXIT_ON_CLOSE表示关闭时退出程序)
      • setVisible(boolean):控制窗口可见性(true为显示)
  3. 容器与组件管理

    • 内容面板:JFrame的组件必须添加到内容面板(通过getContentPane()获取),而非直接添加到窗口
    • 组件添加:Container.add(Component)方法将组件(如JPanel)添加到容器,使组件在窗口中显示
    • 面板作用:JPanel作为中间容器,用于组织其他组件或作为绘图区域
  4. 2D图形绘制基础

    • 绘图方法:自定义绘图需继承JPanel并重写paintComponent(Graphics g)方法
    • Graphics2D:2D绘图的核心类,通过(Graphics2D)g转换获得,支持复杂图形绘制
    • 图形对象:

      • Rectangle2D.Double:创建矩形(参数:x坐标、y坐标、宽、高)
      • Ellipse2D.Double:创建椭圆/圆形(通过setFrame(Rectangle2D)基于矩形创建,矩形为正方形时即为圆形)
    • 绘制步骤:创建图形对象 → 设置颜色(setPaint(Color)) → 填充图形(fill(Shape)

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白包名错误:写成swingx(非标准包)或java.swing(正确包前缀为javax
    • 第二处空白窗口显示错误:遗漏此代码(窗口创建后不显示)或写成setVisible(1)(参数应为布尔值,非整数)
    • 第三处空白类名错误:类名与构造方法名不一致(如写成DrawFrame1),导致编译报错
    • 第四处空白内容面板错误:写成getContainer()(无此方法)或直接使用this(窗口本身不能直接添加组件)
    • 第五处空白添加方法错误:写成adds(方法名错误)或参数错误(如添加字符串而非组件)
    • 第六处空白面板继承错误:写成extends JFrameDrawPanel是面板,不应继承窗口)或未继承JPanel(无法重写paintComponent
  2. 应试技巧

    • 包导入:“Swing组件在javax.swing,import语句要写全,星号代表所有类,组件使用不麻烦”
    • 窗口显示:“窗口创建后要显示,setVisible(true)来调用,参数true是显示,false隐藏要记牢”
    • 类与构造方法:“类名构造要同名,继承JFrame做窗口,标题大小设置好,组件添加到面板”
    • 绘图面板:“绘图用JPanel,继承它来重写方法,paintComponent传Graphics,转换2D绘图形”
    • 图形绘制:“矩形椭圆先创建,setPaint设颜色,fill方法来填充,坐标大小要精准”

通过本题,我们掌握了Swing窗口的创建与显示、容器与组件的管理、自定义面板的绘图方法,以及2D图形(矩形、圆形)的绘制逻辑。这类题型是“GUI框架+图形绘制”的典型体现,对理解Java图形界面开发与可视化呈现具有重要意义。

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