Java 逐步更新JPanel
我试图在JPanel中演示一个算法如何一步一步地填充一个矩阵 问题是我刚刚学会了线程。睡眠(数字)实际上冻结了GUI,我不认为我可以使用Swing定时器来实现这一点。所以我没有主意了 首先,我有一个JPanel1,它有一个JTextField和一个按钮。按下按钮时,将创建一个包含JPanel2的额外框架,该框架将保存表格的表示形式,其大小由上一个文本字段中的数字确定。这一切都由我的控件类处理Java 逐步更新JPanel,java,swing,Java,Swing,我试图在JPanel中演示一个算法如何一步一步地填充一个矩阵 问题是我刚刚学会了线程。睡眠(数字)实际上冻结了GUI,我不认为我可以使用Swing定时器来实现这一点。所以我没有主意了 首先,我有一个JPanel1,它有一个JTextField和一个按钮。按下按钮时,将创建一个包含JPanel2的额外框架,该框架将保存表格的表示形式,其大小由上一个文本字段中的数字确定。这一切都由我的控件类处理 Public class Control implements ActionListener {
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();
}
}
}
锦标赛是使用算法保存方法的类。我将panel2对象作为参数传递给“Tornament”,因此包含算法的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);
}
}
}
public void init()
{
for(int i=0;i
setCell(intx,inty,intz)
方法根据行数和列数更改JPanel2上组件的值
那么,我如何才能使更改逐步显示?我的意思是让程序每次调用
setCell
方法时都等待。您可以使用SwingWorker
来包含循环代码,然后在循环中可以“发布”用于更新GUI的值。在SwingWorker
的process()
方法中,可以使用Thread.sleep(…)
有关更多信息和工作示例,请阅读上Swing教程的部分
如果您想使用Swing计时器,则需要稍微重新构造代码。基本上每次定时器启动时,您都会增加“j”变量。当“J”大于最大值时,将其重置为“0”,并增加“I”变量。然后更新单元格并调用repaint()。您可以使用
SwingWorker
来包含循环代码,然后在循环中可以“发布”用于更新GUI的值。在SwingWorker
的process()
方法中,可以使用Thread.sleep(…)
有关更多信息和工作示例,请阅读上Swing教程的部分
如果您想使用Swing计时器,则需要稍微重新构造代码。基本上每次定时器启动时,您都会增加“j”变量。当“J”大于最大值时,将其重置为“0”,并增加“I”变量。然后更新单元格并调用repaint()。1)使用Swing
计时器调用repaint()
2)为了更快地获得更好的帮助,发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。我将首先尝试使用repaint来调用Swing计时器。我还是这个论坛的新手,所以谢谢你的建议。1)使用Swing计时器调用重新绘制()
2)为了更快地获得更好的帮助,发布一个(最简单的完整可验证示例)或(简短、自含、正确的示例)。我会先尝试使用重新绘制的东西来访问Swing计时器。我对这个论坛还很陌生,所以谢谢你的建议。我想最好的办法是和SwingWorker合作,我只需要找到一种方法来公布这些数字。谢谢我想最好的方法是和SwingWorker合作,我只需要找到一种方法来公布这些数字。谢谢