O botão de metal que o swing vem é muito feio e não pode atender às nossas necessidades reais; portanto, precisamos personalizar nossos botões favoritos, como um botão de imagem, etc., como mostra a figura abaixo.
Em seguida, explique como fazê -lo.
(1) Encontre algumas fotos boas do botão, mas os botões podem estar dentro da imagem, então precisamos usar o Meitu Xiuxiu ou o PS para escolher os botões. Como mostrado na figura abaixo:
(2) Basta salvá -lo como um fundo transparente.
(3) Em seguida, escreva uma aula de botão:
importar javax.imageio.imageio; importar javax.swing.*; importar java.awt.*; importar java.awt.image.bufferiMage; classe pública newbutton estende o jbutton {imageicon img; public newButton (ícone da string) {super (); this.img = new imageicon (Demo.class.getResource (ícone)); setBorDerPainted (false); setContentEArFiled (falso); Setopaque (falso); setSize (img.geticonWidth (), img.geticonheight ()); tente {bi = imageio.read (Demo.class.getResource (ícone)); } catch (Exceção e) {JoptionPane.showMessagedialog (this, "talvez o arquivo de imagem não exista", "Exceção imageio", joptionpane.error_message); System.Exit (0); }} @Override public void PaintComponent (gráficos g) {if (this.getModel (). IsPressed ()) {g.drawimage (img.getImage (), 1,1, this); } else {g.drawimage (img.getImage (), 0,0, este); } super.paintcomponent (g); } BufferImage bi; int rgb, alfa; /*** Defina o botão Clique apenas na área não transparente da imagem. */ @Override public boolean contém (int x, int y) {try {rgb = bi.getRgb (x, y); alfa = (rgb >> 24) e 0xff; if (alfa == 0) {return false; } else {return true; }} Catch (ArrayIndexoutOfBoundSexception e) {// Quando uma área transparente é pesquisada, o GetRGB lança a tabela a seguir dos limites de retorno de exceção falsa; }}} O programa acima reescrito a função contém para garantir que a área de cliques do mouse da parte seja limitada à área válida da imagem.
(4) Escreva um teste de classe de demonstração:
importar javax.swing.*; importar java.awt.*; importar java.net.url; classe pública Demo {public Demo () {jframe jf = new jframe ("Teste de botão de imagem da forma arbitrária"); jf.setbounds (500.200.700.500); myjpanel jp = new myjpanel (Demo.class.getResource ("bg.jpg")); jp.setLayout (nulo); newbutton jb1 = newbutton ("bt1.png"); JB1.setLocation (44,44); jp.add (JB1); jb1 = new 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 privada myjpanel estende jpanel {imageicon bg; public myjpanel (url bg) {this.setOpAque (false); // a ser definido como transparente. this.bg = novo imageicon (bg); } // usado para definir a imagem de fundo @Override public void PaintComponent (gráficos g) {g.drawimage (bg.getImage (), 0,0, this.getwidth (), this.getHeight (), this); super.paintcomponent (g); }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.