Swing: не Может заставить JButton обновлять - перекрашивание () не работа

Swift 4.x и iOS 11.4.

Решение @gabbler все еще работает. ИДК, похоже, что это ошибка UIKit, но ..

Просто используйте:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.navigationBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    self.navigationController?.navigationBar.isHidden = false
}
7
задан jjnguy 9 November 2009 в 08:07
поделиться

2 ответа

Что происходит, так это то, что 3-секундный код выполняется в потоке графического интерфейса пользователя, поэтому кнопка не имеет возможности обновиться, пока это не будет выполнено.

Чтобы решить эту проблему, запустите SwingWorker для выполнения длительной операции; тогда вы по-прежнему сможете делать что-то в графическом интерфейсе, пока ждете этого.

Вот пара из руководств по этой теме и ] SwingWorker Документы Javadoc, указанные выше, также содержат некоторый код.

Пример кода

public void actionPerformed(ActionEvent e) {
    SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
        @Override
        public Void doInBackground() {
            // Call complicated code here
            return null;
            // If you want to return something other than null, change
            // the generic type to something other than Void.
            // This method's return value will be available via get() once the
            // operation has completed.
        }

        @Override
        protected void done() {
            // get() would be available here if you want to use it
            myButton.setText("Done working");
        }
    };
    myButton.setText("Working...");
    worker.execute();
}
15
ответ дан 6 December 2019 в 07:07
поделиться

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

Обычный способ обойти это - перебросить более длительную задачу в другой поток.

Это довольно просто сделать с помощью SwingWorker .

Этот вопрос также может предоставить некоторую полезную информацию.

10
ответ дан 6 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: