English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il pulsante metallico integrato in Swing è molto brutto e non soddisfa le nostre esigenze reali, quindi dobbiamo creare un pulsante personalizzato che ci piaccia, come un pulsante immagine, ecc. Come nella figura seguente.
Quindi spieghiamo come farlo.
(1)Trova alcune immagini di pulsanti belle, ma i pulsanti potrebbero essere all'interno dell'immagine, quindi dobbiamo usare Meitu Xiu o PS per estrarre il pulsante. Come nella figura seguente:
(2)Basta salvare come sfondo trasparente.
(3)Poiò scrivere una classe del pulsante personale:
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); } g.drawImage(img.getImage(),0,0,this); } super.paintComponent(g); } BufferedImage bi ; int rgb,alpha; /** /* Impostare l'area di clic del pulsante solo sull'area non trasparente dell'immagine. */ */ @Override public boolean contains(int x,int y){ try{ rgb = bi.getRGB(x,y); alpha = (rgb>>24)&0xFF; if(alpha==0){ return false; } return true; } } //Quando si trova un'area trasparente, getRGB lancia un'eccezione di IndexOutOfBoundsException return false; } } }
Il programma sopra ha sovrascritto la funzione contains per garantire che l'area di clic del mouse rimanga all'interno dell'area valida dell'immagine.
(4) Scrivere una classe Demo per testare:
import javax.swing.*; import java.awt.*; import java.net.URL; public class Demo { public Demo(){ JFrame jf=new JFrame("Test di pulsanti con immagini a forma libera"); 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); //Deve essere impostato su trasparente. this.bg = new ImageIcon(bg); } //Utilizzato per impostare l'immagine di sfondo @Override public void paintComponent(Graphics g){ g.drawImage(bg.getImage(),0,0,this.getWidth(),this.getHeight(),this); super.paintComponent(g); } } }
Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e ti prego di sostenere e gridare le lezioni.
Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il diritto d'autore è della proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, invia una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.