Java Swing 窗口与面板实战:自定义绘制文本界面全解析
一、原题完整代码呈现
以下是计算机二级Java考试中关于Swing窗口、面板及自定义绘制的典型题型,主要考察窗口关闭策略、类继承关系、窗口大小设置及面板基类,包含4处需要填写的空白(标记为//*********Found**********
):
import javax.swing.*;
import java.awt.*;
public class Java_2{
public static void main(String[] args){
WelcomFrame frame = new WelcomFrame();
//*********Found**********
frame.setDefaultCloseOperation(JFrame._____________________ );
frame.setVisible(true);
}
}
//*********Found**********
class WelcomFrame extends ___________________{
public WelcomFrame(){
setTitle("Java等级考试");
//*********Found**********
___________________(DEFAULT_WIDTH, DEFAULT_HEIGHT);
WelcomPanel panel = new WelcomPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
}
public static final int DEFAULT_WIDTH = 250;
public static final int DEFAULT_HEIGHT = 100;
}
//*********Found**********
class WelcomPanel extends ___________________{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawString("欢迎参加Java等级考试!",MESSAGE_X, MESSAGE_Y);
}
public static final int MESSAGE_X = 60;
public static final int MESSAGE_Y = 50;
}
二、空白处逐一解析与解答
1. 第一处空白:窗口关闭操作的常量
答案:EXIT_ON_CLOSE
//*********Found**********
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
解析: setDefaultCloseOperation
方法用于设置窗口关闭按钮的行为,JFrame.EXIT_ON_CLOSE
是标准常量,表示点击关闭按钮时终止程序(退出JVM)。若不设置此值,窗口关闭后程序可能仍在后台运行,因此填写EXIT_ON_CLOSE
。
2. 第二处空白:WelcomFrame继承的父类
答案:JFrame
//*********Found**********
class WelcomFrame extends JFrame{
解析: WelcomFrame
是程序的主窗口,需要具备窗口的核心功能(如设置标题、大小、添加组件等)。JFrame
是Swing的顶级窗口容器,提供这些基础功能,因此自定义窗口类需继承JFrame
,填写此类名。
3. 第三处空白:设置窗口大小的方法
答案:setSize
//*********Found**********
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
解析: DEFAULT_WIDTH
和DEFAULT_HEIGHT
分别定义了窗口的宽和高(250×100像素),setSize(int width, int height)
是JFrame
的方法,用于设置窗口大小,因此填写setSize
。
4. 第四处空白:WelcomPanel继承的父类
答案:JPanel
//*********Found**********
class WelcomPanel extends JPanel{
解析: WelcomPanel
需要重写paintComponent
方法实现自定义绘制(绘制文本“欢迎参加Java等级考试!”),JPanel
是Swing的面板容器,支持自定义绘制(通过重写paintComponent
),因此填写JPanel
。
三、完整正确代码
四、程序功能与运行说明
程序功能
该程序是一个简单的Swing窗口应用,通过自定义面板实现文本绘制,核心功能包括:
- 创建主窗口(
WelcomFrame
),标题为“Java等级考试”,大小250×100像素 - 窗口中添加自定义面板(
WelcomPanel
),面板通过重写paintComponent
方法绘制文本 - 文本“欢迎参加Java等级考试!”显示在面板的指定位置(X=60,Y=50)
- 点击窗口关闭按钮时,程序正常退出
运行说明
- 程序启动:
main
方法创建WelcomFrame
实例,设置窗口关闭策略为EXIT_ON_CLOSE
,并通过setVisible(true)
使窗口可见 - 窗口初始化:
WelcomFrame
构造方法中设置标题、大小,创建WelcomPanel
并添加到窗口的内容面板 - 文本绘制:
WelcomPanel
的paintComponent
方法在面板上绘制文本,super.paintComponent(g)
确保面板背景等基础绘制正常执行 - 显示效果:窗口大小250×100像素,中央偏上位置显示“欢迎参加Java等级考试!”文本
五、核心知识点总结
JFrame窗口基础
- 类继承:自定义窗口类需继承
JFrame
,以获得窗口的标题、大小、关闭等核心功能 - 关闭策略:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
是最常用的关闭策略,确保窗口关闭时程序终止 - 大小设置:
setSize(width, height)
用于定义窗口初始尺寸,常量DEFAULT_WIDTH
和DEFAULT_HEIGHT
使代码更易维护
- 类继承:自定义窗口类需继承
JPanel面板与自定义绘制
- 面板作用:
JPanel
作为容器用于组织组件,也可通过重写paintComponent
实现自定义绘制(如文本、图形) - 绘制方法:
paintComponent(Graphics g)
是绘制的核心方法,参数Graphics
提供绘图工具(如drawString
绘制文本) - 父类调用:
super.paintComponent(g)
必须在方法开头调用,用于清除面板原有内容、绘制背景等,避免绘制残留
- 面板作用:
组件层次结构
- 窗口(
JFrame
)→ 内容面板(ContentPane
)→ 自定义面板(WelcomPanel
):形成组件嵌套关系 - 添加逻辑:
contentPane.add(panel)
将面板添加到窗口,面板中的绘制内容才会在窗口中显示
- 窗口(
坐标系统
- 绘制文本的
drawString
方法参数(MESSAGE_X, MESSAGE_Y)
:X为水平坐标(从左到右),Y为垂直坐标(从上到下) - 本例中
MESSAGE_X=60
、MESSAGE_Y=50
:使文本在250×100的窗口中大致居中显示
- 绘制文本的
六、常见错误与应试技巧
常见错误分析
- 第一处空白关闭策略错误:写成
EXIT
(常量名错误,正确为EXIT_ON_CLOSE
)或DISPOSE_ON_CLOSE
(仅关闭窗口,不终止程序) - 第二处空白父类错误:写成
Frame
(AWT的窗口类,非Swing的JFrame
,缺少Swing特性)或JPanel
(面板不能作为顶级窗口) - 第三处空白方法错误:写成
setSize
的拼写错误(如setSise
)或setBounds
(需4个参数,此处仅2个参数) - 第四处空白面板父类错误:写成
Component
(抽象类,不适合直接继承)或JComponent
(虽为父类,但JPanel
是更常用的面板类)
- 第一处空白关闭策略错误:写成
应试技巧
- 窗口关闭:“窗口关闭要退出,EXIT_ON_CLOSE来帮助,JFrame类里的常量,setDefaultCloseOperation传进去”
- 类继承:“窗口继承JFrame,面板继承JPanel,各司其职有分工,窗口装面板,面板绘内容”
- 大小设置:“窗口大小setSize,宽高参数传进去,常量定义更规范,修改只需改一处”
- 自定义绘制:“paintComponent重写它,绘图逻辑里面加,先调super别忘记,清除背景靠它啦”
通过本题,我们掌握了Swing中窗口与面板的继承关系、窗口关闭策略、大小设置及自定义绘制的核心逻辑。这类题型是“容器-组件-绘制”模式的基础案例,对理解Java GUI的组件层次和绘制机制具有重要意义。