Люди утверждают, что нельзя удалить из коллекции, которая повторяется в цикле foreach. Я просто хотел указать, что это технически неверно и точно описывает (я знаю, что вопрос OP настолько продвинут, чтобы избежать этого, чтобы понять это) код, лежащий в основе этого предположения:
for (TouchableObj obj : untouchedSet) { // <--- This is where ConcurrentModificationException strikes
if (obj.isTouched()) {
untouchedSet.remove(obj);
touchedSt.add(obj);
break; // this is key to avoiding returning to the foreach
}
}
Не исключено, что вы не сможете удалить из итерированного Colletion
, а затем продолжить, после чего продолжить. Следовательно, break
в коде выше.
Извиняется, если этот ответ является несколько специализированным прецедентом и более подходит для исходного потока , из которого я пришел сюда, отмеченный как дубликат (несмотря на то, что этот поток выглядит более нюансированным) этого и заблокирован.
, когда вы предпочитаете один, а не другой?
blockquote>Предпочитают привязки клавиш, поскольку они были введены. A
KeyListener
- это соединение более низкого уровня с событиями.Эта страница для привязок клавиш охватывает множество причин, по которым я хотел бы использовать их, а не
KeyListener
. В нем перечислены многие вещи, которые просто «недоступны» дляKeyListener
. НАПРИМЕР. выбор:
WHEN_FOCUSED
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
WHEN_IN_FOCUSED_WINDOW
Чем больше я прочитайте связанный документ, тем меньше я могу понять необходимость задать вопрос. E.G.:
Альтернативой привязке клавиш является использование ключевых слушателей. Ключевые слушатели имеют свое место в качестве низкоуровневого интерфейса для ввода с клавиатуры, но для ответа на отдельные клавиши привязки клавиш более подходят и, как правило, приводят к более легкому сохранению кода. Ключевым слушателям также сложно, если привязка клавиш должна быть активной, когда компонент не имеет фокуса. Некоторые из преимуществ привязок клавиш - это то, что они сами документируют, учитывают иерархию сдерживания, поощряют многократные фрагменты кода (
blockquote>Action
объектов) и позволяют легко удалять, настраивать или совместно использовать действия. Кроме того, они упрощают изменение ключа, к которому привязано действие. Другим преимуществомActions
является то, что у них есть разрешенное состояние, которое обеспечивает простой способ отключить действие без необходимости отслеживать, к какому компоненту он подключен.Текстовые компоненты
Как отмечено @Robin, текстовые компоненты также имеют
DocumentListener
& amp;DocumentFilter
, который можно добавить для функциональности, более подходящей для текстовых документов. Подробнее о функциях текстовых компонентов см. В для слушателей & amp; фильтры .
преимущества
Недостатки
.
KeyListeners (низкоуровневый слушатель)
Преимущества
недостатки
.
AW TEventListener
.
уведомление: упорядочение ключевых событий - это разные платформы по платформе
no access to the x,y location
, мой взгляд --- & gt; для лучшей помощи скорее поставить собственный вопрос на основе SSCCE, короткий, runnable, compilable, AFAIK есть ограничения для 3 или более keyPressed в одно и то же время (короткие клавиши) или реальный порядок keyPressed / release для коротких клавиш, для отдыха лучше , совместимый, управляемый для использования KeyBindings над KeyListener
– mKorbel
30 August 2013 в 20:01
DocumentListener
,DocumentFilter
& quot; также. Многие вопросы SO наKeyListener
s связаны с текстовыми компонентами – Robin 8 March 2013 в 11:45reusable chunks of code
. Возможно, неясно, как можно распределять действия. Например, Actions также можно использовать для создания JMenuItems и JButtons. – camickr 8 March 2013 в 19:32