0

我的问题有点棘手。我正在使用一个Editable JComboBox. 它可能包含区分大小写的项目。例如,它可能有Item1item1。因此,在我的情况下,这两个项目应该被视为不同。

但问题是,这两个项目被视为相同。无论我选择了哪些项目,它总是选择第一个(Item1)。我在谷歌中搜索过,但没有找到任何解决方案。这就是为什么,我在这里。

代码:

//loading of Items
jdcbmItemType = new javax.swing.DefaultComboBoxModel(ItemTypeHandler.getItemTypeComboData(MainFrame.companyId));

private void jcbItemTypeMouseReleased(MouseEvent evt)
{
    if (jcbItemType.getSelectedIndex() != -1)
    {
        loadItemTypeDetails(((ItemObject) jcbItemType.getSelectedItem()).getId());
    }
    else
    {
        resetFields();
    }
}

public static Vector<ItemObject> getItemTypeComboDataV(BigInteger companyId, BigInteger categoryId, boolean addFirstElement, TriState deleted) throws ExceptionWrapper, EJBException
{
    try
    {            
        return (Vector<ItemObject>)lookupItemTypeFacade().getItemTypeComboData(companyId, categoryId, addFirstElement, deleted);
    } catch (ExceptionWrapper exceptionWrapper)
    {
        throw exceptionWrapper;
    } catch (EJBException ejbEx)
    {
        throw ejbEx;
    } catch (Exception ex)
    {
        throw new ExceptionWrapper(ex.getMessage());
    }
}

ItemObject是一个 customClass,其中一个字段是BigInteger,另一个字段是String

getItemTypeComboData运行正常。所以,你可以假设从这里得到一个列表,ItemObject它会很好地将它转换为Vector<ItemObject>

jcbItemType.getSelectedIndex()Item1和总是返回相同的索引item1。但它返回不同的索引item2

我知道,如果我可以使用itemStateChanged事件会更好。但就我而言,我无法使用它。但我的问题是,对于不同的名称字符串,但对于不同大小写的相同字符串,效果很好MouseReleasedFocusLost我真的很迷茫。

另一种提问方式:

是否MouseReleasedFocusLost事件检查区分大小写的项目?

如何解决这个问题?

谢谢。

4

3 回答 3

3

这是我的SSCCE,它工作正常,如果这不是您要找的,那么发布您的SSCCE以获得更好的帮助!


import javax.swing.*;
import java.awt.event.*;

public class ComboBoxTest {

    JComboBox combo;
    JTextField txt;

    public static void main(String[] args) {
        new ComboBoxTest();
    }

    public ComboBoxTest() {
        String items[] = {"Item1", "item1"};
        JFrame frame = new JFrame("JComboBox Case-sensitivity Test");
        JPanel panel = new JPanel();
        combo = new JComboBox(items);
        combo.setEditable(true);

        txt = new JTextField(10);
        panel.add(combo);
        panel.add(txt);
        frame.add(panel);
        combo.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent ie) {
                String str = (String) combo.getSelectedItem();
                txt.setText(str);
            }
        });
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 100);
        frame.setVisible(true);
    }
}
于 2012-05-21T05:57:50.210 回答
0

我认为您正在这样做:-

String[] items = {"item1", "item2"};
JComboBox cb = new JComboBox(items);
cb.setEditable(true);

现在您必须访问已插入其中的 JCombobox 元素,如下所示:- MyItemListener actionListener = new MyItemListener(); cb.addItemListener(actionListener);

class MyItemListener implements ItemListener {
// This method is called only if a new item has been selected.
public void itemStateChanged(ItemEvent evt) {
    JComboBox cb = (JComboBox)evt.getSource();

    // Get the affected item
    Object item = evt.getItem();

    if (evt.getStateChange() == ItemEvent.SELECTED) {
        // Item was just selected
    } else if (evt.getStateChange() == ItemEvent.DESELECTED) {
        // Item is no longer selected
    }
    }
 }

添加 itemListener 后,您可以使用单个 JCombobox 项目执行不同的任务

于 2012-05-21T05:31:44.077 回答
0

试试这个,效果很好...

使用 ActionListener() 捕获点击...然后使用 getSelectedItem() 捕获在 JComboBox 上单击的项目

试试这个,

检查你的控制台的输出

myComboBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent ie) {
            String str = (String) myComboBox.getSelectedItem();
           System.out.println(str);
        }
于 2012-05-21T06:16:37.427 回答