JAVA GUI自定义JPanel画板背景
程序员文章站
2024-03-09 16:52:53
自定义jpanel面板背景
一、前言
1.gui全称是graphical user interface,就是图形用户界面。java的gui应用广泛在我们生活中也很常见。...
自定义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设计中布局是基础也是十分重要的知识。
熟练使用掌握三大布局及其他布局管理器需要自己敲代码练习了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。