带背景图像的Java卡布局
我正在为一个项目创建一个航班预订系统,应用程序的GUI有问题。我正在使用CardLayout来管理此程序的多张卡 在登录卡中,我试图添加背景图像,但输入字段显示在图像下方 该程序的代码是带背景图像的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.*;
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我已更新代码,仅包含相关部分,但无法热链接图像。我感谢您的建议和帮助。