El MetalButton con el que viene Swing es muy feo y no puede satisfacer nuestras necesidades reales, por lo que necesitamos personalizar nuestros botones favoritos, como un botón de imagen, etc. como se muestra en la figura a continuación.
Luego explique cómo hacerlo.
(1) Encuentre algunas buenas imágenes de botones, pero los botones pueden estar dentro de la imagen, por lo que necesitamos usar Meitu Xiuxiu o PS para elegir los botones. Como se muestra en la figura a continuación:
(2) Simplemente guárdelo como un fondo transparente.
(3) Luego escriba una clase de mi botón:
import javax.imageio.imageio; import javax.swing.*; import java.awt.*; import java.awt.image.bufferedImage; Public Class NewButton extiende JButton {Imageicon IMG; public NewButton (String Icon) {super (); this.img = new Imageicon (demo.class.getResource (icon)); setBorderPainted (falso); setContenerAfiled (falso); setOpaque (falso); setSize (img.geticonwidth (), img.geticonheight ()); intente {bi = imageio.read (demo.class.getresource (icon)); } catch (Exception e) {jOptionPane.ShowMessEdialog (esto, "tal vez el archivo de imagen no existe", "Excepción 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, esto); } super.PaintComponent (g); } BufferedImage BI; int rgb, alfa; /*** Establezca el rango de clics de botones solo en el área no transparente de la imagen. */ @Override public boolean contiene (int x, int y) {try {rgb = bi.getrgb (x, y); alfa = (rgb >> 24) y 0xff; if (alfa == 0) {return false; } else {return true; }} Catch (ArrayInDexuToFboundSexception e) {// Cuando se busca un área transparente, GetRGB arroja la siguiente tabla fuera de los límites, excepción, return false; }}} El programa anterior reescribió la función contiene para garantizar que el área de clic del mouse de la fiesta esté limitado al área válida de la imagen.
(4) Escriba una prueba de clase de demostración:
import javax.swing.*; import java.awt.*; import java.net.url; Public Class Demo {public demo () {jframe jf = new Jframe ("prueba de botón de imagen de forma arbitraria"); 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 (verdadero); } public static void main (string [] args) {new Demo (); } clase privada myjpanel extiende jpanel {imageiCon bg; public myjpanel (url bg) {this.setOpAque (falso); // se establecerá en transparente. this.bg = new Imageicon (BG); } // Se usa para establecer la imagen de fondo @Override public void pintarComponent (Graphics g) {g.drawimage (bg.getImage (), 0,0, this.getWidth (), this.getheight (), this); super.PaintComponent (g); }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.