水一期博客


制作一个真实的按钮很简单,比如swing按钮

JButton jb = new JButton();

好吧是肯定有点丑的


当我们在点击一个按钮的时候,步骤可以分为以下几步:

  1. 停留在按钮上方
  2. 点击(长按)按钮
  3. 抬起

那么每一步的按钮都是不一样的,是不是可以用这个步骤来制作一个极其真实的按钮呢?
其实根本不需要JButton,几张图片就可以

1.原始的按钮

原始的按钮是鼠标并没有停留在它的上方
假设初始按钮是这样的:

代码:

JPanel jp = new JPanel();
ImageIcon i = new ImageIcon("Button.png");
JLabel jl = new JLabel(i);
jp.add(jl);
this.add(jp);
this.setVisible(true);
this.setSize(500,400);
this.setResizable(false);

可以看到我们已经有一个"按钮"了

2.鼠标停留在上方的按钮

假设鼠标停在上方时按钮是这样的:

那么现在只需判断鼠标是否在按钮上方就可以了
用一种比较简单的方法:鼠标监听事件(MouseListener)
一共有5个方法:点击、按下、释放、进入、离开

//鼠标在组件上按下并释放时调用
void mouseClicked(MouseEvent e)
//鼠标在组件上按下时调用
void mousePressed(MouseEvent e)
//鼠标在组件上释放时调用
void mouseReleased(MouseEvent e)
//鼠标在组件上停留时调用
void mouseEntered(MouseEvent e)
//鼠标离开组件时调用
void mouseExited(MouseEvent e)

很显然,第4个方法正是我们需要的
如果鼠标在label上停留,那么label就切换到另一种图片


首先要对label添加监听

jl.addMouseListener(this);

之后判断一下是不是jl

void mouseEntered(MouseEvent e) {if(e.getSource() == jl) {}
}

如果是,则将jl的图片更改为另一种图片

void mouseEntered(MouseEvent e) {if(e.getSource() == jl) {jl.setIcon(new ImageIcon("EnterButton.png"));}
}

运行下,可以发现我们停留时图片发生了变化

3.鼠标点击按钮时

和上面的一样
这次我们需要用到第一种方法

void mouseClicked(MouseEvent e) {if(e.getSource()==jl) {jl.setIcon(new ImageIcon("图片的路径"));}
}

4.鼠标离开按钮时

这次我们需要用到第5种方法

void mouseExited(MouseEvent e) {if(e.getSource()==jl) {jl.setIcon(new ImageIcon("Button.png"));}
}

将图片改为初始按钮即可


5.改变鼠标光标

当我们点击一些按钮的时候,鼠标的光标会发生一些变化
那么我们是不是也可以做到呢?


假设停留在按钮上时变为链接选择

那么只需在停留方法中添加一行:

//更改为链接选择光标
this.setCursor(Cursor.HAND_CURSOR);

在离开方法中添加一行:

//更改为默认光标
this.setCursor(Cursor.DEFAULT_CURSOR);

效果图:

完整代码:

package com.qq.me;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;public class MyButton extends JFrame implements MouseListener {ImageIcon i;JPanel jp;JLabel jl;public static void main(String args[]) {MyButton mb = new MyButton();}public MyButton() {jp = new JPanel();i = new ImageIcon("Button.png");jl = new JLabel(i);jp.add(jl);jl.addMouseListener(this);this.add(jp);this.setVisible(true);this.setSize(500,400);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@Overridepublic void mouseClicked(MouseEvent e) {}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {if(e.getSource()==jl) {jl.setIcon(new ImageIcon("EnterButton.png"));this.setCursor(Cursor.HAND_CURSOR);}}@Overridepublic void mouseExited(MouseEvent e) {if(e.getSource()==jl) {jl.setIcon(new ImageIcon("Button.png"));this.setCursor(Cursor.DEFAULT_CURSOR);}}
}

如果觉得按钮周围有空白的话,可以用PS消掉
或者觉得截的按钮有大有小,可以用PS调整


你确定不三连嘛?
三连再走吧!

Java制作一个更加真实的按钮相关推荐

  1. 使用Java制作一个简易的远控终端

    使用Java制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端 ...

  2. 如何用JAVA制作一个漂亮的表格

    如何用JAVA制作一个漂亮的表格 表格图片: 选中一行时高亮显示,且字体变为红色: 在表格中添加数据: 代码如下: import java.awt.BorderLayout; import java. ...

  3. 运用Java制作一个属于自己的音乐播放软件

    运用Java制作一个属于自己的音乐播放软件 前言 上个寒假小编用python做了一个音乐播放软件(博客链接为:)运用tkinter.爬虫做了一个播放音乐的小程序(动态显示歌词[歌词向上翻滚]),觉得效 ...

  4. 怎样用Java制作一个选择题

    怎样用Java制作一个选择题? package Work1;public class TestSelect {public static void main(String[] args) {Quest ...

  5. java制作一个GUI实现字符串的相关操作(合并、比较、检索、清除)

    java制作一个GUI实现字符串的相关操作(合并.比较.检索.清除) 1.使用Box容器 2.字符串比较compareTo() 3.字符串检索indexOf() 4.提示弹窗JOptionPane.s ...

  6. 用java制作一个简易抽签器

    最近闲来无事,想用Java编写一个随机抽签器,最终编写后的运行结果是这样的 下面说一下怎么具体实现,非常简单. 首先,要想出现这个滚动标签,首先必须要有一个窗口来承载它,所以要在main()方法中创建 ...

  7. axure下移固定地方_axure固定元件位置 教程:使用axure动态面板制作一个返回顶部的按钮...

    许多网站上都有一个"返回页首"按钮.无论屏幕如何滚动,"返回顶部"按钮始终浮动在固定位置,随时可用.一旦点击它,他就像一个小小的火箭,摇晃起来,页面将返回页面顶 ...

  8. 用JAVA制作一个画图程序

    在日常生活中画图软件给我们带来了许多便利,往大了说可以用它来制作图标,往小了说也可以当做一个涂鸦板消磨时间. 比如:制作个图标 用来画画: 这个画图程序界面如上,这个程序的功能如下: 1.可更改的画笔 ...

  9. 如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

  10. 怎么用java做日历_如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

最新文章

  1. Android中怎么使图片显示
  2. 计算机408考研重点
  3. [c#基础]关于try...catch最常见的笔试题
  4. JDK 13:什么是AggressiveOpts?
  5. easyphp环境配置
  6. 20145335 《信息安全系统设计基础》课程总结
  7. iPhone卖不出去 采购未达标 苹果“补偿”三星6.83亿美元
  8. script标签中defer和async的区别
  9. 3(1)-字符缓冲流
  10. OpenSTA -- 开源测试工具软件
  11. 英伟达发布迁移学习工具包,现在可以申请早期试用
  12. qt_2_QT5.6+VS2015配置
  13. Java编写简易的代码生成器
  14. RGB格式图片转YUV图片
  15. gmail设置双重验证后,第三工具无法登陆解决
  16. 高冷一字id_一个字网名 高冷一字id
  17. 1-2 实验2 点对点通信
  18. 使用win10自带虚拟光驱打开ISO镜像文件
  19. HTML图片和多行文字并列显示
  20. PHP出现中文乱码的解决方法

热门文章

  1. 前端开发基础-JavaScript
  2. 生成QQ/MSN/旺旺/SKYPE等在线状态图标
  3. 发现一个记录笔记的方法(康奈尔笔记即5R笔记)
  4. 【目标检测】YOLOv5跑通VOC2007数据集
  5. iOS 银行卡号识别
  6. linux查看cuda驱动程序,我的nvidia驱动程序的正确CUDA版本是什么?
  7. 百度移动搜索落地页体验广告白皮书3.0上线
  8. 汪琪玩Excel:只复制可见单元格
  9. 解决confuserEx混淆导致类名消失的问题
  10. 搞清楚模数、数模转换中的AGND和DGND