Почему ComboBoxModel моего JComboBox никогда не вызывает seSelectedItem ()? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть 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);

1 Ответ

0 голосов
/ 22 октября 2018

Я понял это - мне нужно было переопределить .equals () в классе, который обслуживал поле со списком.Это не имеет смысла, потому что я никогда не вижу код, выполняющийся для вызова equals, и мой код просто использует indexOf и получает оба из списка или, по крайней мере, из коллекций, для которых не нужно равных, но для кого-то еще - проверьте равенства и поместите один ви, возможно, он снова будет работать как босс!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...