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的组件层次和绘制机制具有重要意义。