【问题标题】:How to set a single background for all panels in CardLayout? [closed]如何为 CardLayout 中的所有面板设置单一背景? [关闭]
【发布时间】:2015-03-07 14:33:05
【问题描述】:

我正在使用 CardLayout 在 Netbeans 中设计一个应用程序,并且我想为我的所有 JPanel 对象使用相同的背景。

我已经尝试使用How to add an image to a JPanel? 中讨论的方法来完成我想要的操作,但是我还没有弄清楚如何为我的所有面板使用相同的图像。

【问题讨论】:

标签: java image swing jpanel


【解决方案1】:

如何为 CardLayout 中的所有面板设置单一背景..

让它们都透明。

这张图片是煤矿的照片……在午夜。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class BackgroundImageForCardLayout {

    private JComponent ui = null;
    private Image image= new BufferedImage(400,300,BufferedImage.TYPE_INT_RGB);

    BackgroundImageForCardLayout() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
            }
        };

        final CardLayout cl = new CardLayout();
        ui.setLayout(cl);

        final String[] names = {"Card 1", "Card 2", "Card 3"};
        for (String name : names) {
            JPanel p = new JPanel(new GridLayout());
            p.setOpaque(false);
            p.add(getBigColoredLabel(name));
            p.setOpaque(false);
            ui.add(p, name);
        }
        ActionListener animationListener = new ActionListener() {

            int i=0;

            @Override
            public void actionPerformed(ActionEvent e) {
                String name = names[i%names.length];
                cl.show(ui, name);
                i++;
            }
        };
        Timer timer = new Timer(750, animationListener);
        timer.start();
    }

    private final JLabel getBigColoredLabel(String text) {
        JLabel l = new JLabel(text, SwingConstants.CENTER);
        l.setForeground(Color.RED);
        Font f = l.getFont();
        l.setFont(f.deriveFont(120f));
        return l;
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(
                            UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                BackgroundImageForCardLayout o = 
                        new BackgroundImageForCardLayout();

                JFrame f = new JFrame("Background Image for CardLayout");
                // Hack to terminate the Timer on close.
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

【讨论】:

  • 谢谢你的回答,你能指导我如何用“myPicture.gif”替换黑色背景吗?
  • 这是一个单独问题的主题。但请先尝试一些具体问题,然后再与我们联系。
  • 哦,请确保您发布了您的努力的 MCVE,正如您被建议在这里做的那样,正如我在回复中所做的那样。例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。
  • 酷!谢谢,我会看看我能做些什么并在需要时寻求帮助。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多