【问题标题】:Java Card Layout with Background Image带有背景图像的 Java 卡布局
【发布时间】:2017-05-27 10:48:39
【问题描述】:

我正在为一个项目创建航班预订系统,但应用程序的 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();
            }
        }
    }

还附上了应用程序的屏幕截图 (http://i.imgur.com/PkjblPu.png)。

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

【问题讨论】:

  • 但输入字段显示在图像下方那么它们应该出现在哪里以及如何出现?
  • @Reimeus 我想要图像作为背景和上面的输入字段。
  • 尝试在卡片布局中使用两个面板重新创建它,每个面板都有一个组件。例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。如需尽快获得更好的帮助,请发帖 minimal reproducible exampleShort, Self Contained, Correct Example
  • 顺便说一句 - 卡片布局实际上与眼前的问题有关吗?从屏幕截图中可以看出,图像在单个面板中向下推动组件(没有卡片布局。仔细关注问题代码而不是转储整个代码。
  • @AndrewThompson 我已将代码更新为仅包含相关部分,但是无法热链接图像。感谢您的建议和帮助。

标签: java swing awt background-image cardlayout


【解决方案1】:

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

这是证据。

那个红色是卡片布局的面板,按钮面板设置为透明的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2017-10-05
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2017-07-01
    • 2016-01-01
    相关资源
    最近更新 更多