Java swing gui 更改 jlabel 的背景并使其重置

Java swing gui change background of jlabel and make it reset

我有一个具有以下功能的图形用户界面: 顶部的标签 底部的 JFrame 有 2 个 Button,分别称为 left 和 right 中心的面板是带有 2 个 JLabel 的网格布局,用于显示图像或更改背景颜色。 (目前两个 jLabel 的背景颜色都设置为黑色)。

*我希望发生什么。

当您单击按钮 "left" 时,图像出现在 lblPicture1 和 lblPicture2 上,背景为黑色且没有图像。右按钮反之亦然。当您再次单击左侧时,它会重复此循环。

我做到了,但是,当我单击左右按钮时,我只有两张图片,而且没有一张是黑色背景。

我认为这是因为图像没有重置。

你能告诉我如何让它工作吗?

谢谢

package gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.GridLayout;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ExampleGUI extends JFrame {

    private JPanel contentPane;
    private JLabel lblPicture1;
    private JLabel lblPicture2;
    private int change;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExampleGUI frame = new ExampleGUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExampleGUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JLabel lblExampleGui = new JLabel("Example GUI");
        lblExampleGui.setBorder(new EmptyBorder(8, 0, 8, 0));
        lblExampleGui.setFont(new Font("Lucida Grande", Font.PLAIN, 24));
        lblExampleGui.setHorizontalAlignment(SwingConstants.CENTER);
        contentPane.add(lblExampleGui, BorderLayout.NORTH);

        JPanel panelButton = createPanelButton();
        contentPane.add(panelButton, BorderLayout.SOUTH);

        JButton btnLeft = createBtnLeft();
        panelButton.add(btnLeft);

        JButton btnRight = createBtnRight();
        panelButton.add(btnRight);

        JPanel panelCenter = createPanelCenter();
        contentPane.add(panelCenter, BorderLayout.CENTER);

        JLabel lblPicture1 = createLblPicture1();
        panelCenter.add(lblPicture1);

        JLabel lblPicture2 = createPicture2();
        panelCenter.add(lblPicture2);
    }

    public JLabel createPicture2() {
        lblPicture2 = new JLabel();
        lblPicture2.setOpaque(true);
        lblPicture2.setBackground(Color.BLACK);
        return lblPicture2;
    }

    public JLabel createLblPicture1() {
        lblPicture1 = new JLabel();
        lblPicture1.setOpaque(true);
        lblPicture1.setBackground(Color.BLACK);
        //lblPicture1.setIcon(new ImageIcon(ExampleGUI.class.getResource("/gui/schlange.gif")));
        return lblPicture1;
    }

    public JPanel createPanelCenter() {
        JPanel panelCenter = new JPanel();
        panelCenter.setLayout(new GridLayout(0, 2, 8, 0));
        return panelCenter;
    }

    public JButton createBtnRight() {
        JButton btnRight = new JButton("right");
        btnRight.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //TODO
                lblPicture1.setBackground(Color.BLACK);
                lblPicture2.setIcon(new ImageIcon(ExampleGUI.class.getResource("/gui/schlange.gif")));
            }
        });
        btnRight.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
        return btnRight;
    }

    public JButton createBtnLeft() {
        JButton btnLeft = new JButton("left");
        btnLeft.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //TODO
                lblPicture2.setBackground(Color.BLACK);
                lblPicture1.setIcon(new ImageIcon(ExampleGUI.class.getResource("/gui/schlange.gif")));

            }
        });
        btnLeft.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
        return btnLeft;
    }

    public JPanel createPanelButton() {
        JPanel panelButton = new JPanel();
        return panelButton;
    }

}

背景画在icon下面,所以如果icon不重置,那么它会继续显示。

您可以简单地设置图标属性,通过传递它null,例如

public JButton createBtnLeft() {
    JButton btnLeft = new JButton("left");
    btnLeft.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //TODO
            lblPicture2.setIcon(null);
            lblPicture2.setBackground(Color.BLACK);
            lblPicture1.setIcon(new ImageIcon(ExampleGUI.class.getResource("/gui/schlange.gif")));

        }
    });
    btnLeft.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
    return btnLeft;
}