java立即绘制JFrame
我有class LevenbergForm extends JFrame
和一个函数calculate()
一般来说,该函数中有一个for
循环,在每次迭代中,我都需要创建一个new JFrame
,显示它并等待按钮被按下
我遇到的问题是JFrame
没有绘制它的组件。里面全是白色的。并且仅在函数calculate()
结束时绘制
当我还在for
循环中时,如何让JFrame
自己绘制
在按下button
之前如何停止?(可选)
void calculate(boolean stepByStep) {
for (int i = 0; i < n; ++i) {
//...
graph = new JFrame();
graph.setContentPane(chartPanel);
graph.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
graph.pack();
graph.setVisible(true);
graph.setLocationRelativeTo(null);
//Draw JFrame and stop for loop until button pressed
//...
}
}
# 1 楼答案
不要使用JFrame,它在创建和显示时是非阻塞的。相反,使用一个模式对话框,比如JOptionPane,它会阻止当前线程的流,直到它被处理完毕
话虽如此,您的程序设计既不方便又可能令人讨厌。为什么不干脆使用Swing计时器来更改显示的JLabel文本的状态呢
# 2 楼答案
您也可以考虑在EDT以外的线程上运行计算。您可以使用这样的代码(未经测试)
或者更好:
此解决方案不会阻止用户输入,但会在计算方法完成之前显示JFrame。如果您希望通过按钮按下来控制计算,那么我建议您反转控制:让按钮按下触发执行计算中一个步骤的事件