GUI在运行ActionEvent之前无法直观更新

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).有没有办法打击这个?

bje*_*ski 6

每次从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如果这更符合您的需求,您也可以使用它.链接到相关答案