我创建了一个按钮数组:
JButton bt[][]=new JButton[8][8];
然后我通过以下方式调用名为
refreshBoard
的函数public void refreshBoard() {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
bt[i][j] = new JButton();
bt[i][j].setIcon(new javax.swing.ImageIcon("icons/"+ board[i][j] +".png"));
panel.add(bt[i][j);
}
}
board[i][j]
中的值控制要在按钮上显示的图像。我每隔一段时间调用一次refreshBoard函数。问题是,当我第二次调用该函数时,它添加了64(8X8)
新按钮,而不是替换已经显示的按钮。我如何使其取代旧按钮,而不是添加新按钮。 最佳答案
每当您按下bt[i][j] = new JButton()
面板时,该行refreshBoard()
都会创建新的按钮。这个不对。
这样做:
设置panel
instance variable
,以便所有instance methods
都可以访问它。
添加板:
public void addBoard() {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
bt[i][j] = new JButton();
bt[i][j].setIcon(new javax.swing.ImageIcon("icons/"+ board[i][j] +".png"));
panel.add(bt[i][j);
}
}
刷新板:
要刷新电路板,必须从
buttons
中提取JPanel
,然后使用它们:JButton button = null;
Component[] components = panel.getComponents();
public void refreshBoard() {
for (int i = 0; i < components.length; i++) {
if (components[i] instanceof JButton) {
button = (JButton) components[i];
button.setIcon(<set the icon however you want. extracting from the `board[][]` or by creating new ones>));
}
}
}
您也可以将支票放在要提取的
JButton
上:String buttonText = button.getText();
注意:按下“刷新”时,您无需替换旧按钮,只需从面板中提取按钮,然后像上面代码中所做的那样在其上设置图标即可。