English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Встроенные в Swing окна не могут удовлетворить нашим потребностям в приложении, поэтому нам нужно создать окно JFrame с любым изображением и формой, например, как показано на следующем рисунке:
И можно установить прозрачность фона окна
Далее объясним, как достичь эффекта, показанного на рисунке:
(1) Сначала вам нужно красивое изображение, например, пергамент. Но загруженное изображение имеет прямоугольную форму, а форма пергамента находится внутри изображения, поэтому мы используем функцию вырезания из MeituXiuXiu или Photoshop, чтобы вырезать пергамент, как показано ниже:
(2) Сохраните изображение с прозрачным фоном.
(3) Далее пишем myJFrame, наследующий JFrame, код如下:
import com.sun.awt.AWTUtilities; import javax.swing.*; import java.awt.*; public class myJFrame extends JFrame{ private float alpha; public myJFrame(String bgPath, float alpha){ super(); myContentPane rp = new myContentPane(bgPath); rp.setOpaque(false); // Устанавливает содержимое панели в прозрачное this.setContentPane(rp); this.setUndecorated(true); this.setSize(rp.img.getIconWidth(), rp.img.getIconHeight()); AWTUtilities.setWindowOpaque(this, false); // Устанавливает JFrame в прозрачный this.alpha = alpha; } private class myContentPane extends JPanel{ public ImageIcon img; public myContentPane(String bgPath) { super(); img = new ImageIcon(Test.class.getResource(bgPath)); } @Override protected void paintComponent(Graphics g) { AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); Composite old = ((Graphics2D) g).getComposite(); ((Graphics2D) g).setComposite(ac); if(img!=null){ g.drawImage(img.getImage(), 0, 0, getWidth(), getHeight(), this); } ((Graphics2D) g).setComposite(old); super.paintComponent(g); } } }
Основной код программы: установить JFrame в прозрачный режим, удалить рамку JFrame, установить панель контента в прозрачный режим и нарисовать изображение на панели контента.
(4) Написать тестовый класс Test:
import javax.swing.*; import java.awt.*; public class Test { public static void main(String[] args) { /** * Установить фоновое изображение и прозрачность фонового изображения, 0 - полностью прозрачный, 1.0f - непрозрачный. */ myJFrame f = new myJFrame("ab.png",0.7f); f.setLayout(null); Font font = new Font("宋体",Font.PLAIN,30); JLabel user = new JLabel("用户名"); user.setFont(font); user.setBounds(100,150,100,30); JTextField userInput = new JTextField(); userInput.setFont(font); userInput.setBounds(200,145,250,40); JLabel ps = new JLabel("Пароль"); ps.setFont(font); ps.setBounds(110,200,90,30); JTextField psInput = new JTextField(); psInput.setFont(font); psInput.setBounds(200,195,250,40); f.add(user); f.add(userInput); f.add(ps); f.add(psInput); f.setLocation(300,100); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
(5) Из-за удаления рамки, окно не может быть перетащено и растянуто, реализация функции перетаскивания и растяжения см. в этой статье swing реализует перетаскивание и растяжение окна
Вот и все, что было в этой статье, надеюсь, это поможет вам в изучении, и希望大家多多支持 Урок.
Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент был предложен и загружен пользователями Интернета, сайт не имеет права собственности, не underwent редактирование, и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите спорное содержание, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма, пожалуйста, замените # на @) для жалоб, и предоставьте соответствующие доказательства. При обнаружении, сайт немедленно удаляет спорное содержание.