Java Swing gui меняет фон jlabel и делает его сбросом

У меня есть графический интерфейс, в котором есть: этикетка вверху JFrame внизу с 2 кнопками, называемыми слева и справа панель в центре, которая представляет собой сетку с двумя метками JLabel для отображения изображения или изменения цвета фона. (в настоящее время для обоих jLabels установлен черный цвет фона).

* что бы я хотел.

Когда вы нажимаете кнопку «влево», изображение появляется на 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;
    }

}

Назовите setIcon(null) на этикетке, которую вы хотите сделать черной

MadProgrammer 22.03.2018 00:59

@MadProgrammer гений, я знал, что это что-то простое, спасибо! :)

Bob 22.03.2018 01:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
513
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Фон нарисован под 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;
}

Другие вопросы по теме