JLabel的财产没有变化

时间:2017-09-25 10:33:27

标签: java jlabel

我有一个名为boardGUI的类,它有一个包含64个标签的列表(如棋盘)。每个标签都与电路板上的特定瓷砖相对应。

$lastYear = (int)date("Y") - 1;

在另一个类中,每当我点击其中一个标签(在mouseClicked方法内)时,我试图用List<JLabel> labelList = new ArrayList<>(); 方法设置一些不透明的标签。

setOpaque(true)

问题是虽然l1引用了labelList中的右侧标签(我使用调试器检查过),但它并没有进行任何视觉上的改变(在GUI上)。

但是,如果我正在尝试在boardGUI类中设置标签的不透明度,那么它正在工作。

JLabel l1 = boardGUI.labelList.get(1);
l1.setOpaque(true);

问题出在哪里?

这是我正在尝试应用更改的类:

for (int i=0;i<64;i++)
   labelList.get(i).setOpaque(true);

BoardGUI类(代码更多,但不相关):

public class Controller {

    private Board board = new Board();
    private BoardGUI boardGUI = new BoardGUI();


    public Controller () {
        boardGUI.setVisible(true);
        boardGUI.addLabelListener(new LabelListener());

    }

    class LabelListener implements MouseListener{


        @Override
        public void mouseClicked(MouseEvent arg0) {
            JLabel l1 = boardGUI.labelList.get(1);
            l1.setOpaque(true);
        }

1 个答案:

答案 0 :(得分:1)

您需要设置背景颜色和不透明度;这是一个展示如何一起玩的例子:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new FlowLayout());
    frame.getContentPane().setBackground(Color.GREEN);

    JLabel label1 = new JLabel("label1");
    label1.setBackground(Color.RED);
    label1.setOpaque(false);
    frame.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {
            label1.setOpaque(!label1.isOpaque());
            label1.setBackground(label1.getBackground() == Color.RED ? Color.BLUE : Color.RED);
        }
        public void mouseReleased(MouseEvent e) {}
        public void mousePressed(MouseEvent e) {}
        public void mouseExited(MouseEvent e) {}
        public void mouseEntered(MouseEvent e) {}
    });

    frame.add(label1);
    frame.pack();
    frame.setVisible(true);
}

标签最初是transparanet,然后更改为BLUE,不透明,并返回每个MouseClick。所以基本上,你需要将背景颜色与不透明一起设置(RED颜色只是为了证明它永远不会显示,因为标签从不是不透明和红色)。