一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - swing重繪按鈕為任意形狀圖案的方法

swing重繪按鈕為任意形狀圖案的方法

2021-03-10 14:26_Thomas Java教程

這篇文章主要為大家詳細介紹了swing重繪按鈕為任意形狀圖案,具有一定的參考價值,感興趣的小伙伴們可以參考一下

swing自帶的metalbutton是非常丑的,不能滿足我們的實際需求,所以需要定制自己喜歡的按鈕,比如一個圖片按鈕等等。如下圖所示。

swing重繪按鈕為任意形狀圖案的方法

接著說明如何制作。

(1)找一些好看的按鈕圖片,但是按鈕可能在圖片內部,所以我們需要用美圖秀秀或者ps將按鈕摳出來。如下圖:

swing重繪按鈕為任意形狀圖案的方法

(2)將其保存為透明背景就可以了。

(3)然后寫一個我的按鈕類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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類測試:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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);
  }
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/A694543965/article/details/78410828

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美视频精品一区二区三区 | 国产精品色爱综合网 | 精品区2区3区4区产品乱码9 | 精品亚洲欧美中文字幕在线看 | 久久机热免费视频 | 欧美极品brazzers 高清 | 亚洲精品九色在线网站 | 日本免费精品视频 | 亚洲成av人片天堂网 | 水多多凹凸福利视频导航 | 色姑娘导航 | 乌克兰黄色录像 | 免费在线视频一区 | 色琪琪久久草在线视频 | 91综合精品网站久久 | 国产成人在线视频播放 | 三级aaa黄特色 | 关晓彤一级做a爰片性色毛片 | 校服下的白嫩小乳尖h1v1 | 美女张开双腿让男人捅 | 忘忧草在线社区WWW日本直播 | 97色伦图片7778久久 | 国产99页| 国产精品亚洲w码日韩中文 国产精品香蕉在线观看不卡 | 99久久精品自在自看国产 | 99国产精品免费视频 | 欧美一区二区三区综合色视频 | 含羞草国产亚洲精品岁国产精品 | 国产日韩欧美在线一二三四 | 美女奶口隐私免费视频网站 | 图片专区亚洲欧美另类 | 国产1区二区| 修修视频在线观看 | 欧美视频一区二区专区 | 亚洲毛片基地4455ww | 和两个男人玩3p好爽视频 | 国产日韩精品一区二区在线观看播放 | 美女黑人做受xxxxxⅹ | 亚洲成在人线视频 | 偷拍综合网 | 精品一区二区91 |