我试图在JPanel中逐步显示algorythm如何填充矩阵。
事情是我刚学会Thread.Sleep(number)
实际上冻结了GUI,我不认为我可以使用Swing Timers。所以我没有想法了。
首先,我有一个 JPanel1 ,它有一个JTextField和一个Button。按下按钮时,会在其中创建一个带有 JPanel2 的额外框架,该框架将保存表格的表示形式,其大小由前一个文本字段中的数字决定。这完全由我的控制类处理。
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();
}
}
}
锦标赛是使用algorythm保存方法的类。我将 panel2 对象作为参数传递给" Tournament"以便包含algorythm的init()
方法将是更新面板的方法。
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
方法时都让程序等待。
答案 0 :(得分:4)
您可以使用SwingWorker
来包含循环代码,然后在循环内部,您可以&#34;发布&#34;用于更新GUI的值。在process()
的{{1}}方法中,您可以使用Thread.sleep(...)。
阅读Concurrency上Swing教程中的部分,了解更多信息和工作示例。
如果您想使用Swing Timer,您需要重新编码一下代码。基本上每次Timer触发时你都会增加&#34; j&#34;变量。什么时候&#34; J&#34;如果大于最大值,则将其重置为&#34; 0&#34;并增加&#34; I&#34;变量。然后更新单元格并调用repaint()。