我的问题有点棘手。我使用的是Editable JComboBox
。它可能包含区分大小写的项目。例如,它可能包含Item1
和item1
。所以,在我的情况下,这两个项目应该被视为不同。
但问题是,这两个项目被视为相同。无论我选择哪个项目,它总是选择第一个(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
事件会更好。但在我的情况下,我不能使用它。但我的问题是,MouseReleased
和FocusLost
适用于不同的名称字符串但不同的字符串具有不同的大小写。我真的很绊倒。
提出问题的另一种方式:
MouseReleased
或FocusLost
事件会检查区分大小写的项吗?
如何解决此问题?
感谢。
答案 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);
}