У меня есть 2 поля со списком в моем приложении Swing. В приведенном ниже коде вы увидите элементы Spring, так как я использую Spring вместе с ним.Я не могу удалить пружину, иначе приложение перестало бы работать без большой работы по рефакторингу, чтобы занять место Spring, поэтому, пожалуйста, не спрашивайте об этом.При запуске приложения по умолчанию, после входа в диалоговое окно с полями со списком, они не должны показывать выбор, и если вы щелкаете в окне, чтобы открыть, чтобы отобразить параметры, есть только один параметр («Добавить ...»).
Проблема в том, что после нажатия кнопки «Добавить ...» параметры закрываются, но выбор никогда не заменяется.Я подумал, что, возможно, мне нужно добавить ActionListener, но ActionListener (который просто отображает панель параметров сообщения с выбором), похоже, ничего не делает - окно сообщения не отображается.Первоначально я начал настраивать собственную реализацию ComboBoxModel, но затем изменил ее на расширение из DefaultComboBoxModel и переопределение методов, которые должны быть разными, таких как getElementAt, getSize и тому подобное.getSelectionItem работает плавно, хотя в моей исходной модели (расширяя стандартную модель со списком, я удалил get и установил Selection Item, так как класс по умолчанию позаботился об этом для меня или так, как я думал).
Чем я могу бытьделает неправильно или отсутствует?Вот код:
@Component
public class WordInstancePartOfSpeechComboBoxModel extends DefaultComboBoxModel<PartOfSpeech> implements Serializable
{
private static final long serialVersionUID = 2509351721137099113L;
private static final Logger msObjLogger = LoggerFactory.getLogger(WordInstancePartOfSpeechComboBoxModel.class);
private List<PartOfSpeech> mLstModel;
@Autowired
private WordInstancePartOfSpeechDialogController mObjDialogController;
protected WordInstancePartOfSpeechDialogController getDialogController()
{
return(mObjDialogController);
}
public PartOfSpeech getElementAt(final int iIndex)
{
if(iIndex > 0)
return(getModel().get(iIndex - 1));
else if(iIndex == 0)
return(new PartOfSpeech("Add..."));
else
return(null);
}
protected List<PartOfSpeech> getModel()
{
try
{
if(mLstModel == null)
mLstModel = getDialogController().listPartOfSpeeches();
}
catch(SQLException objException)
{
msObjLogger.error("Error retrieving list of Parts of Speech...", objException);
mLstModel = new ArrayList<PartOfSpeech>();
}
return(mLstModel);
}
public int getSize()
{
return(getModel().size() + 1);
}
}
и код из моего класса конфигурации Spring для реализации JComboBox:
if(mCboWordInstancePartOfSpeech == null)
{
mCboWordInstancePartOfSpeech = new JComboBox<PartOfSpeech>(getWordInstancePartOfSpeechComboBoxModel());
mCboWordInstancePartOfSpeech.setBorder(BorderFactory.createLoweredBevelBorder());
mCboWordInstancePartOfSpeech.setFont(getDefaultFont());
mCboWordInstancePartOfSpeech.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent objActionEvent)
{
JComboBox<PartOfSpeech> cbo = ((JComboBox<PartOfSpeech>)(objActionEvent.getSource()));
JOptionPane.showMessageDialog(null, "The selected item is" + cbo.getSelectedIndex(), "Success!", JOptionPane.INFORMATION_MESSAGE);
}
});
}
return(mCboWordInstancePartOfSpeech);