Я добавляю ItemListener в combobox, и я хочу знать, всегда ли событие ItemEvent.DESELECTED запускается перед событием ItemEvent.SELECTED или если заказ не указан.
На простом примере кажется, что DESERECTED запущен раньше, но могу ли я доверять этому примеру?
combo = new JComboBox<String>(new String[}{"A","B","C"});
combo.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(final ItemEvent e)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
logger.debug("{} selected", e.getItem());
// Load the file selected in the JTextArea using JTextArea.setDocument()
}
else if(e.getStateChange() == ItemEvent.DESELECTED)
{
logger.debug("{} deselected", e.getItem());
// If doc in the textarea has been modified, save it now
}
}
});
Чтобы добавить контекст к вопросу, я использую комбо, чтобы выбрать файл для загрузки в JTextArea. Пользователь может редактировать файл через текстовое поле. Если она выберет другой файл в комбо, я хочу сообщить ей, что предыдущий файл был отредактирован и попросил ее подтвердить сохранение изменений. Могу ли я реализовать это безопасно в ItemListener комбо? Разумеется, я имею в виду, могу ли я быть уверенным, что если я вызову textArea.getText() в этот момент времени (элемент DESELECTED), я уверен, что текстовое поле еще не заполнено содержимым загружаемого нового файла?
В общем случае заказ не указан. В частности, комбинированный выбор и текстовый дисплей не имеют отношения к базовому состоянию Document
. Если пользователь решил продолжить редактирование, просто восстановите измененный Document
в текстовой области.