这里有新鲜出炉的 Java 并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了 JAVA GUI 自定义 JPanel 画板背景的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
自定义 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 设计中布局是基础也是十分重要的知识。
熟练使用掌握三大布局及其他布局管理器需要自己敲代码练习了。
来源: http://www.phperz.com/article/17/1214/359033.html