我有一个名为boardGUI的类,它有一个包含64个标签的列表(就像一个棋盘)。每个标签对应于电路板上的特定瓷砖。
List<JLabel> labelList = new ArrayList<>();
setOpaque(true)
方法,每当我单击其中一个标签时(在mouseClicked方法内)。
JLabel l1 = boardGUI.labelList.get(1);
l1.setOpaque(true);
问题是,尽管l1在labelList中引用了正确的标签(我与调试器进行了检查),但它没有(在GUI上)进行任何视觉更改。
但是,如果我试图在boardGUI类中设置标签的不透明度,它是有效的。
for (int i=0;i<64;i++)
labelList.get(i).setOpaque(true);
问题出在哪里?
下面是我尝试应用更改的类:
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);
}
public class BoardGUI extends JFrame{
List<JLabel> labelList = new ArrayList<>();
public BoardGUI() {
createView();
}
public void createView() {
createLabels(mainPanel);
}
public void createLabels(JPanel mainPanel) {
int startX = 100;
int startY = 87;
int x = 100;
int y = 87;
int j = 0;
for (int i=0;i<64;i++) {
JLabel label = new JLabel();
label.setBounds(x , y , 62, 62);
labelList.add(label);
mainPanel.add(label);
if ( (i == 7*(j+1) +j )) {
x = startX;
y = startY + 62 *( i / 7);
j=j+1;
}
else {
x = x+62;
}
}
}