gpt4 book ai didi

java - 如何不断更新按钮颜色 [JAVA SWING]

转载 作者:行者123 更新时间:2023-12-02 01:15:11 26 4
gpt4 key购买 nike

我创建了一个类,它以 2 个维度 ( n,m ) 和一个矩阵 ( mat ) 作为参数。这个类创建一个 JFrame,用白色(代表 1)或黑色(代表 0)的按钮填充它。

问题是,发送的矩阵不断变化,我希望按钮颜色更新。如果我在循环中设置 mainframe game = new mainframe(n,m,mat) 并更改矩阵,它会不断生成 JFrame 窗口。

我在这个网站上读到一些东西,使用 repaint() 或 revalidate() 可以做这样的事情。我尝试将其放入不同的代码段中,但没有成功。

主类只是一个循环,它调用“大型机”并在循环中更新矩阵。下面是使 GUI 实际工作的类:

package game;
import java.awt.Color;

public class mainframe extends Jframe {

public mainframe(int n,int m,int mat[][]){
JButton[] buttons = new JButton[n*m];
setSize(600,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLayout(new GridLayout(n,m));

for(int i = 0; i<n*m;i++) {
buttons[i] = new JButton();
}

int counter = 0;
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
if(mat[j][k]==0){
buttons[counter].setBackground(Color.BLACK);
}
add(buttons[counter]);
counter++;
}
}
}
}

最佳答案

添加组件后放置 setVisible(true);revalidate();。与 frame content pane 更好地合作.

import javax.swing.*;
import java.awt.*;

class Scratch {

public static void main(String[] args) throws InterruptedException {
JFrame jFrame = new JFrame();

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(600, 400);
jFrame.setVisible(true);

for (int i = 5; i < 10; ++i) {
jFrame.setContentPane(createPanel(i, i, new int[i][i]));
jFrame.revalidate();
Thread.sleep(1000);
}
}

public static JPanel createPanel(int n, int m, int[][] mat) {
JButton[] buttons = new JButton[n * m];
JPanel jPanel = new JPanel();

jPanel.setLayout(new GridLayout(n, m));

for (int i = 0; i < n * m; i++) {
buttons[i] = new JButton();
}
for (int j = 0; j < n; j++) {
for (int k = 0; k < m; k++) {
int index = k + k * j;

if (mat[j][k] == 0) {
buttons[index].setBackground(Color.BLACK);
}
jPanel.add(buttons[index]);
}
}

return jPanel;
}
}

关于java - 如何不断更新按钮颜色 [JAVA SWING],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57663319/

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