如何在 if 语句中使用 setOpaque(true/false)

How to use setOpaque(true/false) in an if statement

我的 JLabel 不会更改为蓝色背景。 JLabel 已经设置为蓝色背景,但在您按下按钮之前它不是不透明的。为什么它仍然不透明? setOpaque 是否适用于 if 语句?

import java.awt.Color;
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;

import java.awt.event.*;

public class TestOpaque {

public static void main (String args[])
{
    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel label = new JLabel("Label with blue background");
    label.setBackground(Color.BLUE);
    label.setOpaque(false);
    frame.add(label, BorderLayout.WEST);
    
    JButton button = new JButton("Button");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            if (label.isOpaque() == false) {
            label.setOpaque(true);
            label.revalidate();
            }
        }
    });
    frame.add(button, BorderLayout.EAST);
    
    frame.pack();
    frame.setVisible(true);
}
}

if 语句工作正常,但更好地使用 if (!label.isOpaque()) {

您需要通过 repaint() 重绘 GUI 组件才能显示背景:

    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (!label.isOpaque()) {
                label.setOpaque(true);
                label.revalidate();
                label.repaint();
            }
        }
    });