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图形界面开发与可视化呈现具有重要意义。