Java 图形绘制实战:Swing窗口与2D图形绘制全解析
一、原题完整代码呈现
以下是计算机二级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创建图形界面,在窗口中绘制蓝色背景和黄色圆形,核心功能包括:
- 创建名为“千里共婵娟”的窗口(宽400,高240)
- 窗口中添加自定义面板
DrawPanel
,作为绘图区域 在面板上绘制:
- 蓝色矩形(覆盖整个面板,作为背景)
- 黄色圆形(位于坐标(50,50),宽高50,模拟“月亮”)
运行说明
程序启动流程:
main
方法创建DrawFrame
窗口实例- 设置窗口关闭时退出程序(
JFrame.EXIT_ON_CLOSE
) - 调用
setVisible(true)
显示窗口
窗口初始化(
DrawFrame
构造方法):- 设置窗口标题为“千里共婵娟”,大小为400×240
- 创建
DrawPanel
实例panel
(绘图面板) - 获取内容面板,将
panel
添加到内容面板中
绘图逻辑(
DrawPanel
的paintComponent
方法):- 调用
super.paintComponent(g)
确保面板正确刷新 - 将
Graphics
对象转换为Graphics2D
(支持2D图形绘制) - 绘制蓝色背景:创建
Rectangle2D
(坐标(0,0),宽400,高400),设置颜色为蓝色并填充 - 绘制黄色圆形:创建矩形框架(坐标(50,50),宽50,高50),通过
Ellipse2D
基于该矩形绘制圆形,设置颜色为黄色并填充
- 调用
运行效果:
- 窗口标题为“千里共婵娟”
- 窗口背景为蓝色,左上角有一个黄色圆形(模拟月亮)
五、核心知识点总结
Swing组件与包导入
- 核心包:
javax.swing
包含所有Swing组件(JFrame
、JPanel
等),需通过import javax.swing.*
导入 - 优势:Swing是Java的轻量级GUI工具包,组件跨平台一致性好,支持自定义绘图
- 核心包:
窗口(JFrame)基本操作
- 实例化:
new JFrame()
创建窗口对象,通常通过继承JFrame
扩展功能 核心方法:
setTitle(String)
:设置窗口标题setSize(int width, int height)
:设置窗口大小setDefaultCloseOperation(int)
:设置关闭行为(JFrame.EXIT_ON_CLOSE
表示关闭时退出程序)setVisible(boolean)
:控制窗口可见性(true
为显示)
- 实例化:
容器与组件管理
- 内容面板:
JFrame
的组件必须添加到内容面板(通过getContentPane()
获取),而非直接添加到窗口 - 组件添加:
Container.add(Component)
方法将组件(如JPanel
)添加到容器,使组件在窗口中显示 - 面板作用:
JPanel
作为中间容器,用于组织其他组件或作为绘图区域
- 内容面板:
2D图形绘制基础
- 绘图方法:自定义绘图需继承
JPanel
并重写paintComponent(Graphics g)
方法 Graphics2D
:2D绘图的核心类,通过(Graphics2D)g
转换获得,支持复杂图形绘制图形对象:
Rectangle2D.Double
:创建矩形(参数:x坐标、y坐标、宽、高)Ellipse2D.Double
:创建椭圆/圆形(通过setFrame(Rectangle2D)
基于矩形创建,矩形为正方形时即为圆形)
- 绘制步骤:创建图形对象 → 设置颜色(
setPaint(Color)
) → 填充图形(fill(Shape)
)
- 绘图方法:自定义绘图需继承
六、常见错误与应试技巧
常见错误分析
- 第一处空白包名错误:写成
swingx
(非标准包)或java.swing
(正确包前缀为javax
) - 第二处空白窗口显示错误:遗漏此代码(窗口创建后不显示)或写成
setVisible(1)
(参数应为布尔值,非整数) - 第三处空白类名错误:类名与构造方法名不一致(如写成
DrawFrame1
),导致编译报错 - 第四处空白内容面板错误:写成
getContainer()
(无此方法)或直接使用this
(窗口本身不能直接添加组件) - 第五处空白添加方法错误:写成
adds
(方法名错误)或参数错误(如添加字符串而非组件) - 第六处空白面板继承错误:写成
extends JFrame
(DrawPanel
是面板,不应继承窗口)或未继承JPanel
(无法重写paintComponent
)
- 第一处空白包名错误:写成
应试技巧
- 包导入:“Swing组件在javax.swing,import语句要写全,星号代表所有类,组件使用不麻烦”
- 窗口显示:“窗口创建后要显示,setVisible(true)来调用,参数true是显示,false隐藏要记牢”
- 类与构造方法:“类名构造要同名,继承JFrame做窗口,标题大小设置好,组件添加到面板”
- 绘图面板:“绘图用JPanel,继承它来重写方法,paintComponent传Graphics,转换2D绘图形”
- 图形绘制:“矩形椭圆先创建,setPaint设颜色,fill方法来填充,坐标大小要精准”
通过本题,我们掌握了Swing窗口的创建与显示、容器与组件的管理、自定义面板的绘图方法,以及2D图形(矩形、圆形)的绘制逻辑。这类题型是“GUI框架+图形绘制”的典型体现,对理解Java图形界面开发与可视化呈现具有重要意义。