2013-04-06 5 views
0

Я очень новичок в Swing.Как сделать блокировку кнопок в Java Swing?

У меня есть

itemActionButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent arg) { 
     itemAction(); 
    } 
}); 

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

Как я могу это сделать?

+1

Я думал, что вы были. Выполнение действия изнутри actionPerformed будет продолжать блокировать EDT. Вы можете отключить кнопку e (по щелчку), запустить действие в SwingWorker и арендовать кнопку из сделанного метода SwingWorker – MadProgrammer

+0

Пол вы можете увидеть здесь: http://stackoverflow.com/questions/8083768/stop-cancel- swingworker-thread – Gere

+0

Как уже указывалось, я бегу в основной теме здесь. Оказывается, я вызываю 'itemAction()' косвенно из TimerTask в другом месте. Чтобы заставить 'itemAction()' запускаться в основном потоке, мне пришлось использовать 'SwingUtilities.invokeLater()'. –

ответ

1

Код в ActionListener выполняется на EDT, что предотвращает перерисовку GUI и реагирование на другие события.

Если у вас долго работающая задача, и вы не хотите блокировать EDT, вам нужно использовать другой Thread.

Для получения дополнительной информации и решения с помощью SwingWorker ознакомьтесь с разделом из учебника Swing по телефону Concurrency.

Смежные вопросы