2017-05-27 172 views
1

我正在爲一個項目創建一個Flight Reservation系統,該應用程序的GUI有問題。我正在使用CardLayout來管理該程序的多個卡。帶背景圖像的Java卡布局

在登錄卡中,我試圖添加背景圖像,但輸入字段顯示在圖像下方。

本方案的代碼是

import java.io.*; 
    import java.awt.*; 
    import java.awt.image.*; 
    import javax.swing.*; 
    import javax.imageio.*; 
    import java.net.*; 

    public class CardPanel { 
     public static void main(String[] args) { 
      try { 
       CardLayout cardLayout = null; 
       JFrame frame = new JFrame("Welcome"); 
       JPanel contentPane = new JPanel(cardLayout); 

       URL url = new URL("https://i.stack.imgur.com/P59NF.png"); 
       BufferedImage img = ImageIO.read(url); 
       ImageIcon imageIcon = new ImageIcon(img); 
       JLabel logo = new JLabel(imageIcon); 

       JPanel buttonsPanel = new JPanel(); 
       JButton login = new JButton("Login"); 
       buttonsPanel.add(login); 

       contentPane.setLayout(new BorderLayout(10, 15)); 

       contentPane.add(logo, BorderLayout.NORTH); 
       contentPane.add(buttonsPanel, BorderLayout.SOUTH); 

       frame.add(contentPane, BorderLayout.CENTER); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setResizable(false); 
       frame.pack(); 
       frame.setVisible(true); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

該應用的屏幕截圖也附着(http://i.imgur.com/PkjblPu.png)。

我想按鈕在背景圖像上方。

+0

_but輸入字段的顯示image_下面那麼,及應如何出現? – Reimeus

+0

@Reimeus我想要圖像作爲背景和它上面的輸入字段。 –

+0

嘗試使用卡布局中的兩個面板重新創建此卡,每個面板都有一個組件。獲取圖像的一種方法是通過[本問答](http://stackoverflow.com/q/19209650/418556)中的圖像進行熱鏈接。爲了儘快提供更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

回答

1

測試表明卡片佈局不能用於顯示BG圖像。看起來它在內部移除一張卡並在交換組件時添加另一張卡。使用自定義繪製的JPanel繪製BG圖像。

以下是證據。

enter image description here

即紅色是與卡的佈局的面板,按鈕面板被設置爲是透明的。

import java.awt.*; 
import javax.swing.*; 
import java.net.URL; 

public class CardPanel { 

    public static void main(String[] args) throws Exception { 
     CardLayout cardLayout = new CardLayout(); 
     JFrame frame = new JFrame("Welcome"); 
     JPanel contentPane = new JPanel(cardLayout); 
     contentPane.setBackground(Color.RED); 

     ImageIcon imageIcon = new ImageIcon(new URL("https://i.stack.imgur.com/OVOg3.jpg")); 
     JLabel logo = new JLabel(imageIcon); 

     JPanel buttonsPanel = new JPanel(); 
     JButton login = new JButton("Login"); 
     buttonsPanel.add(login); 

     buttonsPanel.setOpaque(false); 

     contentPane.add(logo, "logo"); 
     contentPane.add(buttonsPanel, "button"); 

     cardLayout.show(contentPane, "button"); 

     frame.add(contentPane, BorderLayout.CENTER); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
}