区分大小写的jcombobox

时间:2012-05-21 05:20:35

标签: java swing jcombobox case-sensitive

我的问题有点棘手。我使用的是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()始终返回Item1item1的相同索引。但它返回item2的不同索引。

我知道,如果我可以使用itemStateChanged事件会更好。但在我的情况下,我不能使用它。但我的问题是,MouseReleasedFocusLost适用于不同的名称字符串但不同的字符串具有不同的大小写。我真的很绊倒。

提出问题的另一种方式:

MouseReleasedFocusLost事件会检查区分大小写的项吗?

如何解决此问题?

感谢。

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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项目

执行不同的任务

答案 2 :(得分:0)

试试这个,它运作正常......

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

试试这个,

在您的控制台中检查输出

myComboBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent ie) {
            String str = (String) myComboBox.getSelectedItem();
           System.out.println(str);
        }