java - 如何使用 JLabel 在 JFrame 上添加背景图像?

标签 java jframe bluej

我正在尝试使用 JLabel 在 JFrame 上显示背景图像。代码运行并且按钮出现,但图像没有出现。我已经研究过解决方案,但还没有找到专门适合我的代码的解决方案。任何帮助将不胜感激。

/**
 * Adds details to interface and programs buttons
 * 
 * Imani Davis 
 * Final Project
 */

import java.awt.*;
import java.awt.GridBagLayout;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.border.EmptyBorder;


public class Use_PF_Interface extends JFrame implements Pet_Fish_Interface
{
    // instance variables - replace the example below with your own
    private JFrame window;
    private JPanel panel1, panel2, panel3;
    private JLabel lblBackgroundImage = new JLabel();
    private JButton feedButton = new JButton("Feed Fish");
    private JButton playGamesButton = new JButton("Play Game");

    /**
     * Constructor for objects of class Use_PF_Interface
     */
    public Use_PF_Interface()
    {
        setTitle("Virtual Pet Fish");
        setSize(650, 650);


        //initializes panels and panel layout
        panel1 = new JPanel();
        panel2 = new JPanel();
        panel3 = new JPanel();
        panel1.setLayout(new FlowLayout());
        panel2.setLayout(new FlowLayout());
        panel3.setLayout(new FlowLayout());

        lblBackgroundImage.setLayout(new FlowLayout());

        //sets background image of panel
        lblBackgroundImage.setIcon(new ImageIcon("C:\\Users\\This PC\\Desktop\\OCEAN2.JPEG"));
        panel1.add(lblBackgroundImage);
        validate();

        //adds button to panels
        panel2.add(feedButton);
        panel2.add(playGamesButton);

        //add panels to frame
        add(panel1);
        add(panel2);

    }


}

最佳答案

JFrame 默认情况下使用 BorderLayoutBorderLayout 只能管理它提供的五个可用位置中任意一个的单个组件,这意味着 panel2 很可能是唯一显示的组件。

另一种方法是将组件添加到 JLabel 中,但请记住,JLabel 没有默认的布局管理器。另外,请记住,JLabel 仅使用 icontext 属性来计算其首选大小,因此如果内容需要更多空间,它们将被剪辑。

首先查看 How to Use BorderLayout了解更多详情

另外,请记住,大多数 Swing 组件通常都是不透明的,因此当您想做这样的事情时,需要将它们设置为透明

Background

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Use_PF_Interface extends JFrame {
    // instance variables - replace the example below with your own

    private JPanel panel2;
    private JLabel lblBackgroundImage = new JLabel();
    private JButton feedButton = new JButton("Feed Fish");
    private JButton playGamesButton = new JButton("Play Game");

    /**
     * Constructor for objects of class Use_PF_Interface
     */
    public Use_PF_Interface() {
        setTitle("Virtual Pet Fish");
        setSize(650, 650);

        //initializes panels and panel layout
        panel2 = new JPanel();
        panel2.setOpaque(false);
        panel2.setLayout(new FlowLayout());

        lblBackgroundImage.setLayout(new FlowLayout());

        //sets background image of panel
        lblBackgroundImage.setIcon(new ImageIcon("..."));
        lblBackgroundImage.setLayout(new BorderLayout());

        //adds button to panels
        panel2.add(feedButton);
        panel2.add(playGamesButton);

        lblBackgroundImage.add(panel2);

        add(lblBackgroundImage);

    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new Use_PF_Interface();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

关于java - 如何使用 JLabel 在 JFrame 上添加背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36638420/

相关文章:

java - JFrame 附加在另一个 JFrame 的侧面

java - 从另一个类调用方法,出现错误

java - 除非发生其他事情,否则如何使用 if 语句运行?

java - 需要有关如何实现遗传算法类型应用程序的建议

java - Selenium |元素不可交互错误: Explored all the options of stack overflow

Java:使用 Swing 的安全动画

java - 在单独的类中重新绘制/更新 JPanel 时出现问题

java - 使用字符串作为参数对 ArrayList 进行线性搜索

java - 删除xml中的标题栏

java - 对于 java/j2ee,序列化如何工作以及如何在 session 中保存该对象?