swing重绘按钮为任意形状
来源:互联网 发布:linux中tail命令 编辑:程序博客网 时间:2024/05/22 03:17
swing自带的metalButton是非常丑的,不能满足我们的实际需求,所以需要定制自己喜欢的按钮,比如一个图片按钮等等。如下图所示。
接着说明如何制作。
(1)找一些好看的按钮图片,但是按钮可能在图片内部,所以我们需要用美图秀秀或者PS将按钮抠出来。如下图:
(2)将其保存为透明背景就可以了。
(3)然后写一个我的按钮类:
import javax.imageio.ImageIO;import javax.swing.*;import java.awt.*;import java.awt.image.BufferedImage;public class newButton extends JButton{ ImageIcon img; public newButton(String icon){ super(); this.img = new ImageIcon(Demo.class.getResource(icon)); setBorderPainted(false); setContentAreaFilled(false); setOpaque(false); setSize(img.getIconWidth(),img.getIconHeight()); try{ bi = ImageIO.read(Demo.class.getResource(icon)); }catch(Exception e){ JOptionPane.showMessageDialog(this,"可能是图片文件不存在","ImageIO异常",JOptionPane.ERROR_MESSAGE); System.exit(0); } } @Override public void paintComponent(Graphics g){ if(this.getModel().isPressed()){ g.drawImage(img.getImage(),1,1,this); }else{ g.drawImage(img.getImage(),0,0,this); } super.paintComponent(g); } BufferedImage bi ; int rgb,alpha; /** * 设置按钮点击范围仅在图片的非透明区域。 */ @Override public boolean contains(int x,int y){ try{ rgb = bi.getRGB(x,y); alpha = (rgb>>24)&0xFF; if(alpha==0){ return false; }else{ return true; } }catch(ArrayIndexOutOfBoundsException e){ //当搜索到透明区域时,就getRGB抛出下表越界异常 return false; } }}上面的程序重写了contains函数保证党鼠标点击区域限制在图片的有效区域内。
(4)写一个Demo类测试:
import javax.swing.*;import java.awt.*;import java.net.URL;public class Demo { public Demo(){ JFrame jf=new JFrame("任意形状图片按钮测试"); jf.setBounds(500,200,700,500); myJPanel jp = new myJPanel(Demo.class.getResource("bg.jpg")); jp.setLayout(null); newButton jb1 = new newButton("bt1.png"); jb1.setLocation(44,44); jp.add(jb1); jb1 = new newButton("snowFlower.png"); jb1.setLocation(200,44); jp.add(jb1); jb1 = new newButton("bt2.png"); jb1.setLocation(350,64); jp.add(jb1); jb1 = new newButton("bt3.png"); jb1.setLocation(450,64); jp.add(jb1); jf.add(jp); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } public static void main(String[] args){ new Demo(); } private class myJPanel extends JPanel{ ImageIcon bg; public myJPanel(URL bg) { this.setOpaque(false);//要设置为透明。 this.bg = new ImageIcon(bg); } //用于设置背景图片 @Override public void paintComponent(Graphics g){ g.drawImage(bg.getImage(),0,0,this.getWidth(),this.getHeight(),this); super.paintComponent(g); } }}
阅读全文
1 0
- swing重绘按钮为任意形状
- 图形界面上的任意形状图形按钮
- 图形界面上的任意形状图形按钮
- C# 任意形状按钮控件 实现简单实用
- swing 设置鼠标形状
- 任意形状图像、图形
- opencv任意形状ROI
- opencv任意形状ROI
- roi任意形状
- WTL按钮重绘
- 重绘按钮控件
- 博为峰Java技术文章 ——JavaSE Swing 按钮
- Swing中设置鼠标形状
- WPF复杂形状按钮
- 按钮形状---超链接
- 图片按钮+自定义形状
- 实现任意形状连接关系
- 把UIView切成任意形状
- 通讯概念(三)ip,mac,netmask,默认网关
- Selenium learning key points summary
- hibernate需要的jar包及其作用
- a64_7.1android平板更改状态栏底部导航栏navgationBar颜色
- ios WKWebView 与 JS 交互实战技巧
- swing重绘按钮为任意形状
- 使用GZIP解压缩数据,以及解决中文乱码
- tensorflow c/c++库使用方法
- Java 线程 4
- 拉里·埃里森亲自支招,数据库自动化之后,DBA何去何从?
- 关于ImageLoader的使用将图片改变为圆形
- 1190: [HNOI2007]梦幻岛宝珠
- Vue + ElementUI 手撸后台管理网站基本框架(二)权限控制
- 蓝桥杯:世纪末的星期天