在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度;

按照方法:

JButton jb1 = new JButton();
jb1.setBounds(0, 0, 25, 20);
ImageIcon ii = new ImageIcon("images/xxx.png");
jb1.setIcon(ii);

但是,在修改完按钮的大小后,按钮还是没有改变,这是因为我是对图片没有进行缩放

所以,修改为以下:

JButton jb1 = new JButton();
jb1.setBounds(0, 0, 25, 20);
ImageIcon ii = new ImageIcon("images/xxx.png");
//根据按钮大小改变图片大小
Image temp = ii.getImage().getScaledInstance(jb1.getWidth(), jb1.getHeight(), ii.getImage().SCALE_DEFAULT);
ii = new ImageIcon(temp);
jb1.setIcon(ii);
jb1.setToolTipText("image");

修改为以上方法后,确实可以了,但是我上面有6个按钮需要修该,难不成要一个一个该?那要是有100个我改咋办?

这是我们就需要对以上的模块进行封装;(我的类是:GUITools )

package cn.cetc.util;//可修改为自定的包名

import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL; import javax.swing.ImageIcon;
import javax.swing.JButton; public class GUITools {
//将Icon图标按照JButton对象的边界大小进行缩放,并返回JButton对象
public static JButton getButtonWithScaledIcon(URL resource,int width,int height,String tip){
JButton button=new JButton();
button.setBounds(0,0,width,height);
button.setPreferredSize(new Dimension(width,height));
ImageIcon buttonImgSrc=new ImageIcon(resource);//载入原始大小的图像
Image temp=buttonImgSrc.getImage().getScaledInstance(button.getWidth(), button.getHeight(), Image.SCALE_DEFAULT);//改变图像的大小
ImageIcon scaledImageIcon = new ImageIcon(temp);
button.setIcon(scaledImageIcon);//大多数组件的setIcon方法只接受ImageIcon类型的参数,并且Java组件类只有这一个方法用来设置图片。JFrame组件有方法setIconImage( Image image)接受Image类型的参数
button.setToolTipText(tip);//JButton的提示信息
button.setBorderPainted(false);
button.setContentAreaFilled(false);//初始化时不绘制内容区域,使显示为透明的按钮
// 效果增强代码:用于处理鼠标进入或离开工具条按钮时的效果
button.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
if (e.getSource() instanceof JButton) {
((JButton) e.getSource()).setContentAreaFilled(true);
}
} public void mouseExited(MouseEvent e) {
if (e.getSource() instanceof JButton) {
((JButton) e.getSource()).setContentAreaFilled(false);//设置 contentareafilled 属性。如果该属性为 true,则按钮将绘制内容区域。如果希望有一个透明的按钮,比如只是一个图标的按钮,那么应该将此属性设置为 false。不要调用 setopaque(false)。contentareafilled 属性的默认值为 true。
}
}
}); return button;
}
}

因为这里我的六个按钮是要同样大小的,我就将其大小设为静态常量,通过此来改变按钮的大小

调用如下:

        //创建登录按钮
URL resource = this.getClass().getResource("/img/login.png");
final JButton loginButton = GUITools.getButtonWithScaledIcon(resource, 64, 64, "登录");

最终效果:

当然大家可以将之前的模块放在你自己工具类中,这样方便以后调用。

原文链接:java中带图片按钮的大小设置

[转]java中带图片按钮的大小设置的更多相关文章

  1. java中带图片按钮的大小设置

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度: 按照方法: JB ...

  2. java中得到图片的宽度 高度:

    java中得到图片的宽度 高度:BufferedImage srcImage = null;srcImage = ImageIO.read(new File(srcImagePath));int sr ...

  3. Java中带包(创建及引用)的类的编译

    Java中带包(创建及引用)的类的编译与调试 java源程序的编译大家都知道,也就是cmd中到源文件所在目录下javac **.java即可,当程序中有包声明还能简简单单的直接javac **.jav ...

  4. CSS中对图片(background)的一些设置心得总结

    写网页的时候很多情况需要对图片进行操作,如何在不进行专业的美工裁切操作的情况下而让自己的素材度达到最大的满意度呢,这是一个问题,对于懒得开ps切图的我,通常会直接在网络上download一张图片,直接 ...

  5. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  6. JAVA实现带图片的列表——JList

    JList:显示对象列表并且允许用户选择一个或多个项的组件. JList的构造方法: 1.根据数组创建列表: JList(Object[] listData) 构造一个 JList,使其显示指定数组中 ...

  7. java中判断图片格式并且等比例压缩图片

    最近项目中需要判断上传的图片必须是png,jpg,gif三种格式的图片,并且当图片的宽度大于600px时,压缩图片至600px,并且等比例的压缩图片的高度. 具体的实现形式: 大致的思路是: 判断根据 ...

  8. Java中显示图片的方法

    最近在做一个swing小项目,其中需要把存储在硬盘中的图片文件显示出来,总结了如下方法: 1. Graphics g = getGraphics();String name = "E:/Ca ...

  9. Java中带标签的break,continue

    首先不带标签的break,continue 就不介绍了.大家平时用的最多的也就是这样的情况了. 首先Java中没有goto,但是可以利用带标签的break, continue来实现类似的跳转. 首先来 ...

  10. Java中初级数值类型的大小, volatile和包装类wrapped type的比较

    Java中的初级数值类型 Java是静态类型语言, 所有的变量必须先声明再使用. 其初级类型一共8种: boolean: 数据只包含1bit信息, 但是占空间为8-bit, 默认值为false byt ...

随机推荐

  1. NeuVector 会是下一个爆款云原生安全神器吗?

    近日一则<SUSE 发布 NeuVector:业内首个开源容器安全平台>的文章被转载于各大 IT 新闻网站.作为 SUSE 家族的新进成员,在 3 个月后便履行了开源承诺,着实让人赞叹.那 ...

  2. IntelliJ IDEA 设置背景图片 随机快捷更换背景图片(附高清4K背景图N张)

    前言 开发过程枯燥乏味,何不为自己工作中添加点乐子呢,除了主题模板,我们可以设置IntelliJ IDEA 的背景图片,换个背景图,换个心情. IntelliJ IDEA 设置背景图片 注意: 必要的 ...

  3. 2022/1/25-2022牛客寒假算法基础集训营1B-炸鸡块君与FIFA22(线段树)

    题目描述 热爱足球(仅限游戏)的炸鸡块君最近购买了FIFA22,并且沉迷于FIFA22的Rivals排位上分. 在该排位系统中,每局游戏可能有胜利(用W表示).失败(用L表示).平局(用D表示)三种结 ...

  4. Python自带difflib模块

    官方文档:https://docs.python.org/3/library/difflib.html difflib模块的作用是比对文本之间的差异,且支持输出可读性比较强的HTML文档,与Linux ...

  5. swiper 垂直滚动

    <template> <div style="height: 100%;width: 100%;"> <swiper :direction=" ...

  6. Chrome控制台中network底部概要参数

    概要参数 1.requests => 资源请求总数: 2.transferred => 网络加载资源大小: 3.resources => 页面所有资源总大小(包含网络资源.浏览器缓存 ...

  7. apache+jk+tomcat集群+session同步

    apache2+tomcat5.5集群+session同步 作者:刘宇 liuyu.blog.51cto.com msn群:mgroup49073@hotmail.com (linuxtone)   ...

  8. Java线程:线程的调度-守护线程——Java线程:线程的调度-合并——Java线程:新特征-障碍器——Java线程:大总结

    Java线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.   守护线程使用的情况较少,但并非无用,举例 ...

  9. 在vue2中按顺序调用多个接口,接收返回数据

    最近有一个点一个按钮调用多个接口,并且按顺序串行调用,根据后端返回的逻辑,区分接口之间的串行关系,前面的接口失败是否继续执行下面接口,有两种方式,都是循环调用接口,实现方式有点差别 第一种reduce ...

  10. [转载]Redis之缓存穿透、缓存击穿、缓存雪崩及其解决方法

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2MDY0NDQwNQ==&mid=2247483949&idx=1&sn=6c643858d ...