スイングに付属するメタルバイトンは非常に醜く、実際のニーズを満たすことができないため、下の図に示すように、お気に入りのボタンなどをカスタマイズする必要があります。
次に、それを作る方法を説明します。
(1)いくつかの良いボタンの写真を見つけますが、ボタンは写真の内側にある可能性があるため、Meitu XiuxiuまたはPSを使用してボタンを選ぶ必要があります。下の図に示すように:
(2)透明な背景として保存するだけです。
(3)その後、私のボタンクラスを書きます:
javax.imageio.imageioをインポートします。 javax.swing。*; java.awt。*; java.awt.image.bufferedimageをインポートします。パブリッククラスNewbuttonはjbutton {ImageIcon IMG; public Newbutton(String Icon){super(); this.img = new ImageIcon(demo.class.getResource(Icon)); setborderpainted(false); setContenTERAEFILLILD(false);セトパック(false); setSize(img.geticonWidth()、img.geticonheight()); try {bi = imageio.read(demo.class.getResource(icon)); } catch(Exception e){joptionpane.showMessageAgeAlog(これ、「画像ファイルは存在しない」、「Imageio例外」、joptionpane.error_message); System.Exit(0); }} @Override public void paintComponent(graphics g){if(this.getModel()。ispresse()){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は次の表を境界外にスローします。 }}}上記のプログラムは、コンテンツ関数を書き直し、パーティーマウスのクリックエリアが画像の有効な領域に制限されるようにします。
(4)デモクラスのテストを書きます:
javax.swing。*; java.awt。*; 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(jp); jf.setDefaultCloseoperation(jframe.exit_on_close); jf.setVisible(true); } public static void main(string [] args){new demo(); }プライベートクラスmyjpanelはjpanelを拡張します{imageicon bg; public myjpanel(url bg){this.setopaque(false); //透明に設定されます。 this.bg = new ImageIcon(BG); } //背景画像@Override public void paintComponent(グラフィックスG)を設定するために使用されます{g.drawimage(bg.getimage()、0,0、this.getWidth()、this.getheigh()、this); Super.PaintComponent(g); }}}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。