激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲性爰 | 麻豆视频国产在线观看 | 麻豆小视频在线观看 | 精品一区二区在线播放 | 成人性生活视频在线观看 | 国产一区二区三区四区五区精品 | www.99av| 特级无码毛片免费视频尤物 | 久久国产一二三 | 91麻豆精品国产91久久久无需广告 | 亚洲综合一区在线观看 | 欧美成人免费看 | 久色成人 | 手机在线看片国产 | 日韩在线视频免费观看 | 国产日产精品一区四区介绍 | 成人做爽爽爽爽免费国产软件 | 久久97超碰 | 日韩电影一区二区三区 | 沉沦的校花奴性郑依婷c到失禁 | 99ri在线 | 国产精品久久久久久久亚洲按摩 | omofun 动漫在线观看 | 日韩激情 | 毛片在线免费播放 | av电影免费在线看 | 亚洲午夜精品视频 | 久久久久久中文字幕 | 亚洲电影免费观看高清完整版在线观 | 亚洲电影在线观看高清免费 | 久久久一区二区 | 欧美日韩爱爱视频 | 国产精品.com | 99国产精品自拍 | 日本视频在线播放 | 欧美精品久久久久久久久久 | 中文字幕国产日韩 | 欧美日韩亚洲国产 | 久草高清视频 | 国产精品亚洲yourport | 成人在线精品视频 |