我的JComboBox
模型包含item1
,item2
,item1
等项目。我的问题是,当我在item1
中选择第三项(JComboBox
)并检查getSelectedIndex()
时,它始终返回0.
如果我的模型中的项目相同,我怎样才能获得不同的每个项目的索引?像:
答案 0 :(得分:6)
它返回index = 0.因为方法getSelectedIndex()
对JComboBox中的对象使用.equals
并将其与所选对象进行比较。在你的情况下,因为item1也在索引0,它找到条件为真并返回0.如果你想获得不同的索引,那么你必须覆盖getSelectedIndex()
方法。
在Java2s找到的JComboBox默认getSelectedIndex()
方法概述:
public int getSelectedIndex() {
Object sObject = dataModel.getSelectedItem();
int i, c;
Object obj;
for (i = 0, c = dataModel.getSize(); i < c; i++) {
obj = dataModel.getElementAt(i);
if (obj != null && obj.equals(sObject))
return i;
}
return -1;
}
如果项目对象有名称或其他任何东西,你应该在2个条目中有一些东西[可能是itemName],以获得所需的结果。覆盖getSelectedIndex()
并比较所有意图不同的东西。如果两个条目完全相同,那么将它添加两次是什么意思?
答案 1 :(得分:4)
如果JComboBox中的两个条目对应于同一个对象,那么即使您单击第3项,所选的实际项目也将是该对象的第一个条目(即索引最低的条目) 我认为这不适用于相同的对象。
答案 2 :(得分:3)
JList
对相同的项目没有任何问题。
import javax.swing.event.*;
import javax.swing.*;
class TestList {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final String[] items = {"item1", "item2", "item1"};
final JList list = new JList(items);
final JTextField output = new JTextField(15);
JPanel gui = new JPanel();
gui.add(list);
gui.add(output);
list.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent lse) {
int index = list.getSelectedIndex();
String outputText =
"Index: " +
index +
" Value: " +
items[index];
output.setText(outputText);
}
});
JOptionPane.showMessageDialog(null, gui);
}
});
}
}