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设计中布局是基础也是十分重要的知识。

熟练使用掌握三大布局及其他布局管理器需要自己敲代码练习了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java的GUI编程之列表和组合框的设计使用

    列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文本选择项条目.列表事件的事件源有两种: 一是鼠标双击某个选项:双击选项是动作事件,与该事件相关的接口是ActionListener,注册监视器的方法是addActionListener(),接口方法是actionPerformed(ActionEvent e). 二是鼠标单击某个选项:单击选项是选项

  • java贪吃蛇游戏编写代码

    本文实例为大家分享了java贪吃蛇游戏展示的具体代码,供大家参考,具体内容如下 1.采用MVC(model.view.control)框架模式 2.包和类的关系树形图为: 3.源码: package com.huai; import Java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.util.HashSet; import java.util.LinkedList; import java.u

  • java贪吃蛇极速版

    本文为大家推荐了一款由java实现经典小游戏:贪吃蛇,相信大家都玩过,如何实现的呐? 效果图: 废话不多说,直接奉上代码: 1. public class GreedSnake { public static void main(String[] args) { SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeVi

  • Java GUI编程之贪吃蛇游戏简单实现方法【附demo源码下载】

    本文实例讲述了Java GUI编程之贪吃蛇游戏简单实现方法.分享给大家供大家参考,具体如下: 例子简单,界面简陋 请见谅 项目结构如下 Constant.jvava 代码如下: package snake; /** * * @author hjn * */ public class Constant { /** * 蛇方移动方向:左边 */ public static final int LEFT = 0; /** * 蛇方移动方向:右边 */ public static final int R

  • java必学必会之GUI编程

    一.事件监听 测试代码一: package cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class TestTextField { public static void main(String args[]) { new MyFrameTextField(); } } class MyFrameTextField extends Frame { MyFrameTextField() { Text

  • java编写贪吃蛇小游戏

    废话不多说,直接奉上代码: Frame.java package snake; import java.awt.Graphics; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import

  • 使用Java编写GUI对话框的教程

    对话框是为了人机对话过程提供交互模式的工具.应用程序通过对话框,或给用户提供信息,或从用户获得信息.对话框是一个临时窗口,可以在其中放置用于得到用户输入的控件.在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类.JDialog类提供构造并管理通用对话框:JOptionPane类给一些常见的对话框提供许多便于使用的选项,例如,简单的"yes-no"对话框等. JDialog类 JDialog类作作对话框的基类.对话框与一般窗口不同,对话框依赖其他窗口,当它所

  • Java编程中应用的GUI设计基础

    早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上.现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单.按钮等,用户通过鼠标选择菜单中的选项和点击按钮,命令程序功能模块.本章学习如何用Java语言编写GUI科学试验,如何通过GUI实现输入和输出. AWT和Swing 先前用Java编写GUI程序,是使用抽象窗口工具包AWT(Abstract Window Toolkit).现在多用Swing.Swing可以看作是AWT

  • java实现的简单猜数字游戏代码

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 具体代码如下: 复制代码 代码如下: import java.util.InputMismatchException; import java.util.Scanner; public class Main {         public static void main(String[] args) {                 // 产生一个随机数                 int number = (in

  • java中使用双向链表实现贪吃蛇程序源码分享

    使用双向链表实现贪吃蛇程序 1.链表节点定义: package snake; public class SnakeNode { private int x; private int y; private SnakeNode next; private SnakeNode ahead; public SnakeNode() { } public SnakeNode(int x, int y) { super(); this.x = x; this.y = y; } public int getX(

随机推荐