English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Встроенная в Swing metalButton очень уродлива и не satisfies our actual needs, so we need to customize our own buttons, such as image buttons, etc.如下图所示。
Далее я объясню, как это сделать.
(1)Найдите красивые кнопки для изображения, но кнопка может быть внутри изображения, поэтому нам нужно вырезать кнопку с помощью MeituXiuXiu или PS.如下图所示:
(2)Достаточно сохранить его с прозрачным фоном.
(3)Затем напишите класс моей кнопки:
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; /** /* Установить диапазон клика кнопки только в непрозрачной области изображения. */ */ @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; } } //При поиске прозрачной области, getRGB выбрасывает исключение ArrayIndexOutOfBoundsException return false; } } }
Верхний код перегружает функцию contains для ограничения области клика мыши в пределах эффективной области изображения.
(4) Написать класс Demo для тестирования:
import javax.swing.*; import java.awt.*; import 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(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);//Нужно сделать прозрачным. this.bg = new ImageIcon(bg); } //Для настройки фонового изображения @Override public void paintComponent(Graphics g){ g.drawImage(bg.getImage(),0,0,this.getWidth(),this.getHeight(),this); super.paintComponent(g); } } }
Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении. также希望大家多多支持呐喊教程。
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, загружен пользователями самостоятельно, сайт не имеет права собственности, не прошел редакторскую обработку и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. При обнаружении правонарушения сайт немедленно удаляет涉嫌侵权的内容.