Le Metalbutton avec lequel le swing est très laid et ne peut pas répondre à nos besoins réels, nous devons donc personnaliser nos boutons préférés, comme un bouton d'image, etc. comme indiqué dans la figure ci-dessous.
Expliquez ensuite comment le faire.
(1) Trouvez de bonnes images de bouton, mais les boutons peuvent être à l'intérieur de l'image, nous devons donc utiliser Meitu Xiuxiu ou PS pour choisir les boutons. Comme indiqué dans la figure ci-dessous:
(2) Enregistrez-le simplement en arrière-plan transparent.
(3) Ensuite, écrivez une classe de bouton:
import javax.imageio.imageio; importer javax.swing. *; import java.awt. *; Importer java.awt.image.bufferedImage; La classe publique Newbutton étend Jbutton {ImageIcon IMG; public newbutton (icône de chaîne) {super (); this.img = new ImageIcon (demo.class.getResource (icon)); SetBorDerpained (false); setContentAreafillad (false); setOpaque (false); setSize (img.getIConWidth (), img.getIconHeight ()); try {bi = imageo.read (demo.class.getResource (icon)); } catch (exception e) {joptionpane.showMessageDialog (this, "peut-être que le fichier image n'existe pas", "Exception ImageIo", joptionpane.error_message); System.exit (0); }} @Override public void paintComponent (Graphics g) {if (this.getModel (). ISPRESSIR ()) {g.drawImage (img.getImage (), 1,1, this); } else {g.drawImage (img.getImage (), 0,0, this); } super.paintComponent (g); } BufferedImage BI; int rgb, alpha; / ** * Définissez la plage de clic du bouton uniquement dans la zone non transparente de l'image. * / @Override public boolean contient (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) {// Lorsqu'une zone transparente est recherchée, getRGB lance le tableau suivant de l'exception des limites return false; }}} Le programme ci-dessus a réécrit la fonction contient pour s'assurer que la zone de clic de la souris du parti est limitée à la zone valide de l'image.
(4) Écrivez un test de classe de démonstration:
importer javax.swing. *; import java.awt. *; Importer java.net.url; Demo de classe publique {public Demo () {jFrame jf = new JFrame ("Button d'image de forme arbitraire"); 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 = newbutton ("Snowflower.png"); JB1.SetLocation (200,44); JP.Add (JB1); JB1 = newbutton ("bt2.png"); JB1.SetLocation (350,64); JP.Add (JB1); JB1 = 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 (); } classe privée Myjpanel étend JPanel {ImageIcon bg; public myjpanel (url bg) {this.setOpaque (false); // à régler sur transparent. this.bg = new ImageIcon (bg); } // Utilisé pour définir l'image d'arrière-plan @Override public void peintComponent (graphics g) {g.drawImage (bg.getImage (), 0,0, this.getWidth (), this.getheight (), this); super.paintcomponent (g); }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.