gpt4 book ai didi

java - 逐步更新JPanel

转载 作者:行者123 更新时间:2023-12-01 18:17:49 24 4
gpt4 key购买 nike

我试图在 JPanel 中展示算法如何逐步填充矩阵。

问题是我刚刚了解到 Thread.Sleep(number) 实际上卡住了 GUI,我不认为我可以为此使用 Swing Timers。所以我没有主意了。

首先,我有一个 JPanel1,它有一个 JTextField 和一个按钮。按下按钮时,会创建一个额外的框架,其中包含 JPanel2,该框架将保存表格的表示形式,其大小由前一个文本字段中的数字确定。这全部由我的 Control 类处理。

Public class Control implements ActionListener
{
JPanel1 panel;

public Control(JPanel1 vista)
{
this.panel = vista;
}

public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("Push"))
{
int num = panel.getNumber();

if(((num & (num - 1)) != 0) || num == 1 || num == 0)
{
panel.isError();
}
else
{
panel.clean();

JPanel2 panel2 = new JPanel2(num);

JFrame window = new JFrame("Tournament");

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setContentPane( (JPanel) panel2);
window.pack();
window.setVisible(true);

Tournament t = new Tournament (num,panel2);
t.init();
}
}
}

Tournament 是包含算法方法的类。我将 panel2 对象作为参数传递给“Tournament”,以便包含算法的 init() 方法将成为更新面板的方法。 p>

public void init()
{

for(int i=0;i < this.matrix.length;i++)
{
for(int j = 0; j < matrix[i].length; j++)
{
matrix[i][j] = 0;
panel2.setCell(matrix[i][j],i,j);
}

}
}

setCell(int x, int y, int z) 方法根据行号和列号更改 JPanel2 上组件的值。

那么我怎样才能让这些变化逐渐出现呢?我的意思是让程序在每次调用 setCell 方法时都等待。

最佳答案

您可以使用 SwingWorker 来包含循环代码,然后在循环内您可以“发布”用于更新 GUI 的值。在 SwingWorkerprocess() 方法中,您可以使用 Thread.sleep(...)。

阅读 Swing 教程中关于 Concurrency 的部分了解更多信息和工作示例。

如果您想使用 Swing Timer,您将需要稍微重组您的代码。基本上每次计时器触发时,您都会增加“j”变量。当“J”大于最大值时,将其重置回“0”并递增“I”变量。然后更新单元格并调用 repaint()。

关于java - 逐步更新JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28641158/

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