JTA*_*pps 5 java user-interface swing swingworker actionevent
为了进一步阐述,我有一个看起来像这样的GUI:

然后我在OK按钮上有一个动作监听器,它起始于:
//OK Button Action Listener
private void okButtonActionPerformed(ActionEvent e) {
//Enable/Disable Buttons
okButton.setEnabled(false);
cancelButton.setEnabled(true);
updateCheckbox.setEnabled(false);
//Move on to a series of other methods here...
Run Code Online (Sandbox Code Playgroud)
从理论上讲,这应该是这样的:

但是,我得到以下内容,直到完成连接到OK按钮的所有方法和其他内容:

这显然不可能发生,因为这个想法是让取消按钮可用,OK按钮和其他几个勾选框在程序的持续时间内不可用(图2),相反,它在半状态下冻结(图3).有没有办法打击这个?
每次从GUI执行逻辑时,您应该以下列方式使用SwingWorker:
SwingWorker myWorker= new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
//Execute your logic
return null;
}
};
myWorker.execute();
Run Code Online (Sandbox Code Playgroud)
如果要从此逻辑内部更新GUI,请使用InvokeLater:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//To update your GUI
}
});
Run Code Online (Sandbox Code Playgroud)
有了这个,您可以确保您的逻辑和GUI保持响应.
编辑:
invokeAndWait如果这更符合您的需求,您也可以使用它.链接到相关答案
| 归档时间: |
|
| 查看次数: |
2860 次 |
| 最近记录: |