gpt4 book ai didi

java - 用新的 JButton 替换旧的 JButton

转载 作者:行者123 更新时间:2023-12-01 23:48:34 27 4
gpt4 key购买 nike

我创建了一个按钮数组:

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() 面板时创建新按钮。这是不对的。

这样做:

创建面板 实例变量,以便所有实例方法都可以访问它。

添加板 block :

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);
}
}

刷新面板:

要刷新面板,您必须从 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();

注意:点击“刷新”时无需替换旧按钮,只需从面板中提取并在其上设置图标,就像我在上面的代码中所做的那样。

关于java - 用新的 JButton 替换旧的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16632734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com