【问题标题】:Adding background image to JPanel on button action在按钮操作上将背景图像添加到 JPanel
【发布时间】:2012-06-14 04:36:02
【问题描述】:

当调用 JButton 时,将背景图像添加到 JPanel/JLabel 的最佳方法是什么?我知道如何获得 JButton 动作等。当按下该按钮时,我无法弄清楚或找到一种方法来更改背景图像。

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖 SSCCE。这可能会回答诸如“我只是无法弄清楚或找到一种方法来让按下该按钮时更改背景图像的方法。”之类的问题。首先如何加载它?

标签: java swing jpanel actionlistener


【解决方案1】:

这是一个例子:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.concurrent.ExecutionException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

public class ModifiableBackgroundFrame extends JFrame implements ActionListener
{
    private static final long serialVersionUID = 1L;
    private ImageIcon image;
    private JPanel pan;
    private JButton btn;
    private int count = 0;
    private static final String[] images = 
        {"http://www.dvd-ppt-slideshow.com/images/ppt-background/background-3.jpg",
        "http://www.psdgraphics.com/wp-content/uploads/2009/02/abstract-background.jpg",
        "http://hdwallpaperpics.com/wallpaper/picture/image/background.jpg",
        "http://www.highresolutionpics.info/wp-content/uploads/images/beautiful-on-green-backgrounds-for-powerpoint.jpg"};

    public ModifiableBackgroundFrame()
    {
        super("The title");

        image = new ImageIcon();

        btn = new JButton("Change background");
        btn.setFocusPainted(false);
        btn.addActionListener(this);
        pan = new JPanel()
        {
            private static final long serialVersionUID = 1L;

            @Override
            public void paintComponent(Graphics g)
            {
                g.drawImage(image.getImage(), 0, 0, null);
            }
        };
        pan.setPreferredSize(new Dimension(400, 400));

        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(pan, BorderLayout.CENTER);
        contentPane.add(btn, BorderLayout.SOUTH);

        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new ModifiableBackgroundFrame();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        btn.setEnabled(false);
        btn.setText("Loading...");
        new SwingWorker<Image, Void>()
        {
            @Override
            protected Image doInBackground() throws Exception
            {
                return ImageIO.read(new URL(images[count++ % 4]));
            }

            @Override
            protected void done()
            {
                try
                {
                    image.setImage(get());
                    pan.repaint();
                }
                catch(InterruptedException e)
                {
                    e.printStackTrace();
                }
                catch(ExecutionException e)
                {
                    e.printStackTrace();
                }
                btn.setText("Change background");
                btn.setEnabled(true);
            }
        }.execute();
    }
}

【讨论】:

  • 很好地使用了SwingWorker。 :)
  • @Eng.Fouad 例子很棒,但在我个人看来,一些解释也会很有用。但是,每个人都有自己的;)
  • 比我需要的要复杂得多,但无论如何都很棒。这帮助了很多!谢谢!
【解决方案2】:

在你的JButton的actionPerformed中,你可以调用JLabel.setIcon(Icon)来设置背景图片。

final JLabel label = new JLabel();
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        label.setIcon(new ImageIcon(SOME_IMAGE));
    }
}

【讨论】:

  • 这似乎无法正常工作.. 仍然没有更改按钮上的标签。我不知道为什么。
猜你喜欢
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 2014-07-06
  • 2019-11-11
  • 1970-01-01
相关资源
最近更新 更多