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

标签 java image swing user-interface panel

我有一个图形用户界面,其中包含: 顶部的标签 底部有一个 JFrame,有 2 个按钮,分别称为“左”和“右” 中心的面板是带有 2 个 JLabel 的网格布局,用于显示图像或更改背景颜色。 (当前两个 jLabel 的背景颜色均设置为黑色)。

*我希望发生什么。

当您单击“左”按钮时,图像出现在 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;
    }

}

最佳答案

背景绘制在图标下方,因此如果图标没有重置,那么它将继续显示。

例如,您可以通过传递 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;
}

关于Java swing gui 更改 jlabel 的背景并使其重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49418306/

相关文章:

css - 在 CSS 中为 PNG 图像投影

ios - 将 RGB 图像转换为灰度并将灰度转换为 RGB 图像?

java - 我正在黑莓模拟器中将图像写入SD卡,如何清除它以进行测试?

java - 自定义边框外的组件绘制

java - 如何制作一个动画圈?

java - Spring Boot ASync + AutoWired Executor 与手动 Executor + Future/Callable?

java - 关于java Runtime自写公共(public)API兼容性

java - JOOQ:没有加载图式?

java - 当我可以实现完整的类时,为什么还需要接口(interface)?

java - 两张图片,一张在 Java 中