English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Создание окна с любым изображением в фоновом режиме в Java

Встроенные в 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 (при отправке письма, пожалуйста, замените # на @) для жалоб, и предоставьте соответствующие доказательства. При обнаружении, сайт немедленно удаляет спорное содержание.

Основной учебник
Вам может понравиться