GOOGLE ADS

суббота, 30 апреля 2022 г.

Кнопки поворота не реагируют сразу! Как я могу это изменить?

Я создал форму с помощью визуального редактора Netbeans. Когда я нажимаю одну из кнопок, она должна делать следующее:


  • отключи его

  • выполнить задачу, которая требует некоторого времени

  • когда задача завершится, кнопка снова станет активной


Однако происходит следующее:


  • кнопка остается в нажатом состоянии, пока задача не завершится

  • когда задача закончится, включение/отключение кнопок будет очень быстрым (они будут происходить, но вы их не заметите)


Такое поведение мне не нужно. Я пытался использовать перерисовку на JButton, на JFrame и даже на JPanel, содержащей кнопку, но я не могу заставить ее делать то, что я хочу. Некоторые намеки?


Решение проблемы

Когда вы работаете с обратным вызовом кнопки, вы останавливаете поток рисования графического интерфейса до его завершения.

Что вам нужно сделать, так это создать поток для выполнения длительной задачи, а затем использовать этот поток SwingUtilities.invokeLater()для обновления пользовательского интерфейса после его завершения. Неиспользование invokeLaterне является потокобезопасным и, как правило, является плохим моджо.

Основной пример:

button.setEnabled(false);
new Thread(new Runnable() {
public void run() {
// Do heavy lifting here
SwingUtilies.invokeLater(new Runnable() {
public void run() {
button.setEnabled(true);
}
});
}
}).start();

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...