带背景图像的Java卡布局

带背景图像的Java卡布局,java,swing,awt,background-image,cardlayout,Java,Swing,Awt,Background Image,Cardlayout,我正在为一个项目创建一个航班预订系统,应用程序的GUI有问题。我正在使用CardLayout来管理此程序的多张卡 在登录卡中,我试图添加背景图像,但输入字段显示在图像下方 该程序的代码是 import java.io.*; import java.awt.*; import java.awt.image.*; import javax.swing.*; import javax.imageio.*; import java.net.*;

我正在为一个项目创建一个航班预订系统,应用程序的GUI有问题。我正在使用CardLayout来管理此程序的多张卡

在登录卡中,我试图添加背景图像,但输入字段显示在图像下方

该程序的代码是

    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();
            }
        }
    }
该应用程序的屏幕截图也附在后面()


我希望按钮位于背景图像上方

测试表明卡布局不能用于显示BG图像。在内部,它似乎在交换组件时移除一张卡并添加另一张卡。使用自定义绘制的
JPanel
绘制背景图像

这是证据

红色是带有卡片布局的面板,按钮面板设置为透明

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);
    }
}

但输入字段显示在图像下方,因此它们应该显示在何处以及如何显示?@Reimeus我希望图像作为背景,并在其上方显示输入字段。请尝试在卡片布局中使用两个面板重新创建该输入字段,每个面板都有一个组件。例如,获取图像的一种方法是热链接到中看到的图像。为了更快地获得更好的帮助,发布一个或.BTW-卡片布局是否与当前问题相关?从屏幕截图中可以看出,图像在单个面板中向下推动组件(没有卡布局。请仔细关注问题代码,而不是转储整个代码。@AndrewThompson我已更新代码,仅包含相关部分,但无法热链接图像。我感谢您的建议和帮助。