[java]④自定义按钮 应用在JFrame窗体

原创 2017年09月07日 01:06:30

这个方法适合一个项目需要大量的按钮操作。

用3个类 CustomButton类自定义按钮、MinButton(局部)类用来调用按钮、然后在OneWindow类应用按钮

我把调用按钮类都放进一个包里,方便以后需要按钮就往里面编写就可以。

1、CustomButton类

import java.awt.Cursor;

import javax.swing.*;

public class CustomButton {
	public ImageIcon icon[] = new ImageIcon[3]; // 图片组 存放三个图标--平时、经过、按下
	public JButton button; // 定义一个按钮类 公共修饰允许被其他类访问
	public String name; // 按钮图片名称

	private void mouse() { // 设置鼠标经过这个按钮的图标
		button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
	}

	private void design() { // 主方法
		for (int i = 0; i < 3; i++) {
			icon[i] = new ImageIcon("Image/icon/" + name + i + ".png");
		}
		button.setBorderPainted(false);// 取消按钮边框
		button.setFocusPainted(false);// 取消焦点状态
		button.setContentAreaFilled(false);// 设置按钮为透明
		button.setDoubleBuffered(false);// 取消双缓冲区进行缓冲
		button.setOpaque(false);// 设置边界处透明
		button.setFocusable(false);// 取消获得焦点

		button.setIcon(icon[0]);// 经过图标
		button.setRolloverIcon(icon[1]);// 成为焦点图标
		button.setPressedIcon(icon[2]);// 按下图标
	}

	public CustomButton(JButton tempButton, String name) {
		this.button = tempButton;
		this.name = name;
		design();
		mouse();
	}
}

2、MinButton(局部)类

import javax.swing.*;
import myButtonClass.CustomButton;


//窗体最小化
public class MinButton extends JButton {
	private static final long serialVersionUID = 1L;
	public JButton min;
      public MinButton(){
    	  min=new CustomButton(this,"min").button; //调用按钮
      }
}
3、OneWindow类

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import buttonGroup.*;

public class OneWindow extends JFrame implements ItemListener {

	private static final long serialVersionUID = 1L;

	Point pressedPoint;

	public OneWindow() {
		this.setUndecorated(true);// 取消窗体修饰效果
		this.getContentPane().setLayout(null);// 窗体使用绝对布局
		this.setLocationRelativeTo(null);// 窗体居中
		this.setAlwaysOnTop(true); // 窗体最顶层显示
		
		ImageIcon logo = new ImageIcon("Image/logo01.jpg");
        this.setIconImage(logo.getImage());//更改logo		

		JLabel lab = new JLabel(); // 使用便签存放背景图片
		ImageIcon icon = new ImageIcon("Image/05.png");
		lab.setIcon(icon);
		lab.setBounds(0, -50, 600, 600);
		this.getContentPane().add(lab);// 加载进窗体

		MinButton min = new MinButton(); // 最小化按钮
		min.setBounds(480, 10, 30, 30);
		this.getContentPane().add(min);
		min.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setExtendedState(JFrame.ICONIFIED);// 窗体最小化
			}
		});

		MaxButton max = new MaxButton(); // 最大化按钮
		max.setBounds(520, 10, 30, 30);
		this.getContentPane().add(max);
		max.addItemListener(this);

		WCloseButton wclose = new WCloseButton(); // 关闭窗口按钮
		wclose.setBounds(560, 10, 30, 30);
		this.getContentPane().add(wclose);
		wclose.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		this.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) { // 鼠标按下事件
				pressedPoint = e.getPoint(); // 记录鼠标坐标
			}
		});
		this.addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseDragged(MouseEvent e) { // 鼠标拖拽事件
				Point point = e.getPoint();// 获取当前坐标
				Point locationPoint = getLocation();// 获取窗体坐标
				int x = locationPoint.x + point.x - pressedPoint.x;// 计算移动后的新坐标
				int y = locationPoint.y + point.y - pressedPoint.y;
				setLocation(x, y);// 改变窗体位置
			}
		});

		this.setTitle("自定义窗体");
		this.setBounds(100, 100, 600, 500);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void itemStateChanged(ItemEvent e) {
		if (e.getStateChange() == ItemEvent.SELECTED) {
			setExtendedState(JFrame.MAXIMIZED_BOTH);// 最大化窗体
		} else {
			setExtendedState(JFrame.NORMAL);// 恢复普通窗体状态
		}
	}

	public static void main(String[] args) {
		new OneWindow();
	}
}


效果图:


版权声明:本文为博主原创文章,未经博主允许不得转载。

java自定义JFrame风格窗体

  • 2013年12月25日 14:35
  • 80KB
  • 下载

JFrame实现系统托盘功能缩放在任务栏,窗体图标自定义

窗体设置默认的关闭操作,在很多软件中为避免关闭按钮退出程序,会设定关闭最小化托盘的操作,JFrame同样可实现该功能;另外,自定义的窗体图标导出为jar可执行文件后,常常不显示,解决办法是将图片资源放...

java中利用JFrame创建窗体

1. 一个简单例子: Java代码   public class Test(){       public static void main(String[] args){ ...

qq项目第一天(java JFrame 标题栏 最小化 最大化 拖动窗体)

运行结果截图:   源码暂时不上传,有希望一起学习的 可以加qq群:151648295   今天本来不止做这么多的,后来遇到一点麻烦事!! 那就是怎么设置 标题栏,系统默认的标题栏很...

C# 窗体的最大化、最小化、关闭按钮的自定义

1 创建一个窗体项目(本项目是在VS2015中进行创建) 2 将窗体的FormBorderStyle属性设置为None,设置后窗体的标题栏将消失不显示 3 添加2个panel空间,...

swing jframe 窗体抓取 (源码)

  • 2010年02月11日 10:56
  • 150KB
  • 下载

C#窗体应用(复选框,单选按钮,拖动水平滚动条)

namespace WindowsFormsApplication1 { partial class Form1 { /// /// 必需的设计器变量...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[java]④自定义按钮 应用在JFrame窗体
举报原因:
原因补充:

(最多只允许输入30个字)