为什么我的JComboBox的ComboBoxModel从未调用seSelectedItem()?

时间:2018-10-22 13:48:21

标签: java swing jcombobox

我的swing应用程序中有2个组合框-在下面的代码中,您也将看到使用Spring的Spring元素。我无法删除spring,否则该应用程序将在没有大量重构工作来代替Spring的情况下停止工作,因此请不要提出这个要求。在应用程序的默认启动状态下,进入带有组合框的对话框时,它们应该不显示任何选择,并且如果您单击该框以打开以显示选项,则只有一个选项(“添加...”)。

问题在于,单击“添加...”后,选项将关闭,但选择永远不会被替换。我以为也许我需要添加一个ActionListener,但是该ActionListener(仅显示带有选择的Message Option窗格)似乎没有任何作用-没有显示消息框。我最初开始自定义实现自己的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 :(得分:0)

我想通了-我需要在组合框提供的类中重写.equals()。这没有任何意义,因为我从未见过代码执行过调用equals的操作,而我的代码仅使用indexOf并从列表或至少集合中获取了这两者,而对于其他任何人都不需要等于-请检查是否等于并放入其中也许它会再次像老板一样工作!