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