JAVA GUI自定义JPanel画板背景
发布时间 - 2026-01-10 22:10:54 点击率:次自定义JPanel面板背景

一、前言
1.GUI全称是Graphical User Interface,就是图形用户界面。JAVA的GUI应用广泛在我们生活中也很常见。很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体。
一般程序与用户的交互都基于对应程序的运行界面。
2.JPanel面板是SWING下的一个面板容器类。该面板支持嵌套,可设置布局方式,设置不同的布局管理器可添加其他控件像JButton按钮,JTextField文本框等。来设计完善一个程序界面窗体。
作为绘制面板支持setBackground()设置背景颜色的方法还远远不够。这里实现自定义为JPanel设置图片背景。
二、平台工具
1.MyEclipse
此处演示使用myeclipse2014
其他支持java awt+swing平台也可
三、图文展示
1.同一窗体下做不同处理JPanel的效果
(1)首先创建一个不加修饰的窗体,一般的普通默认jpanel界面效果如下:
(2)简单的设置背景颜色效果:
(3)自定义处理后的JPanel下的窗体效果:
2.代码实现
自定义JPanel背景处理,该图片为bg.PNG,与测试类在同一路径下,使用图片注意使用相对路径
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUITest {
private static JFrame jframe; //声明一个窗体
private JPanel jpanel; //声明一个画板
public GUITest(){ //构造方法
jframe = new JFrame();
init();
}
private void init(){
jframe.setTitle("测试");
jpanel = new JPanel(){//关键代码,就是重写了paint的一个方法
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon(GUITest.class.getResource("bg.png"));
/**
* bg.PNG这个地方换成自己的图片
* 此处使用的相对路径,bg.png跟该测试类在同一路径下
* 不过建议使用相对路径避免使用绝对路径
*/
img.paintIcon(this, g, 0, 0);
}
};
jpanel.setOpaque(true);
jframe.setBounds(200, 200, 500, 400); //设置显示位置距离左边200像素距离上边200像素及屏幕大小500*400
jframe.add(jpanel); //添加画板到窗体
jframe.setVisible(true); //设置显示界面
}
public static void main(String[] args) {
new GUITest(); // 实例化对象
}
}
四、拓展布局管理器
下面简单写个登录窗体:
基于自定义的JPanel背景,设置GridBagLayout布局,添加按钮文本框等基本控件实现的一个简单登录窗体。
(1)代码如下:
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class GUIT {
//声明窗体,面板及控件
private static JFrame jframe;
private JLabel jlabel,jlabel1;
private GridBagLayout gridbag;
private GridBagConstraints constraints;
private JTextField jtfield1;
private JPasswordField jpfield1;
private JButton jbutton1,jbutton2,jbutton3;
private JPanel jpanel;
public GUIT(){
jframe = new JFrame();
jlabel = new JLabel();
jlabel1 = new JLabel();
jtfield1 = new JTextField();
jpfield1 = new JPasswordField();
gridbag = new GridBagLayout();
jbutton1 = new JButton();
jbutton2 = new JButton();
jbutton3 = new JButton();
init();
}
/**
* init()初始化并显示界面
*/
private void init(){
jframe.setTitle("登录");
/**
* 设置JPanel背景
*/
jpanel = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon(GUITest.class.getResource("ddmbg.jpg"));
img.paintIcon(this, g, 0, 0);
}
};
//为JLabel,JButton初始化文本
jlabel.setText("用户名:");
jlabel1.setText("密 码:");
jbutton1.setText("登录");
jbutton2.setText("退出");
jbutton3.setText("注册");
//设置显示位置及屏幕大小500*400
jframe.setBounds(450, 240, 400, 240);
//jpanel采用GridBagLayout布局管理器
jpanel.setOpaque(false);
jpanel.setLayout(gridbag);
//初始化用户名label,并添加该控件到画板
constraints = getGridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jlabel, constraints);
jpanel.add(jlabel);
//初始化用户名文本框,并添加该组件到画板
constraints = getGridBagConstraints(1,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),100,0);
gridbag.setConstraints(jtfield1, constraints);
jpanel.add(jtfield1);
//初始化密码label
constraints = getGridBagConstraints(0,1,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jlabel1, constraints);
jpanel.add(jlabel1);
//初始化密码文本框
constraints = getGridBagConstraints(1,1,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),100,0);
gridbag.setConstraints(jpfield1, constraints);
jpanel.add(jpfield1);
//初始化注册按钮,并添加该控件到画板
constraints = getGridBagConstraints(0,2,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jbutton3, constraints);
jpanel.add(jbutton3);
//初始化登录按钮
constraints = getGridBagConstraints(1,2,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jbutton1, constraints);
jpanel.add(jbutton1);
//初始化退出按钮
constraints = getGridBagConstraints(2,2,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jbutton2, constraints);
jpanel.add(jbutton2);
//添加画板到窗体
jframe.add(jpanel);
//窗体初始化完成
}
private static GridBagConstraints getGridBagConstraints(int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty,int anchor,int fill,Insets insets,int ipadx,int ipady){
return new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);
}
public static void main(String[] args) {
new GUIT();
jframe.setVisible(true);
}
}
其中ddmbg为图片名
(2)实现效果如图所示:
GUI设计中布局是基础也是十分重要的知识。
熟练使用掌握三大布局及其他布局管理器需要自己敲代码练习了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# JAVA自定义JPanel画板背景
# JAVA自定义画板背景
# JPanel画板背景
# java基于GUI实现简单画笔小画板
# Java定义画板类的方法
# 用Java实现简单画板功能
# Java实现简单画画画板
# Java Swing实现画板的简单操作
# Java版画板的实现方法
# Java实现简单小画板
# 自定义
# 管理器
# 文本框
# 自己的
# 三大
# 也可
# 在同一
# 也很
# 弹出
# 写了
# 不加
# 创建一个
# 大家多多
# 如图所示
# 及其他
# 生活中
# PNG
# bg
# anchor
# fill
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
创业网站制作流程,创业网站可靠吗?
jquery插件bootstrapValidator表单验证详解
Laravel API资源类怎么用_Laravel API Resource数据转换
千库网官网入口推荐 千库网设计创意平台入口
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
装修招标网站设计制作流程,装修招标流程?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
浅谈redis在项目中的应用
Python自动化办公教程_ExcelWordPDF批量处理案例
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何在阿里云域名上完成建站全流程?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
什么是javascript作用域_全局和局部作用域有什么区别?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
iOS UIView常见属性方法小结
高端建站如何打造兼具美学与转化的品牌官网?
Python正则表达式进阶教程_复杂匹配与分组替换解析
Bootstrap CSS布局之列表
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
专业商城网站制作公司有哪些,pi商城官网是哪个?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Python面向对象测试方法_mock解析【教程】
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
简历没回改:利用AI润色让你的文字更专业
Swift开发中switch语句值绑定模式
如何基于PHP生成高效IDC网络公司建站源码?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
node.js报错:Cannot find module 'ejs'的解决办法
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框

