public class Test8 extends JFrame implements KeyListener{
JComboBox jcb;
public static void main(String...args){
new Test8();
}
public Test8(){
jcb = new JComboBox();
jcb.addItem("AB");
jcb.addItem("CD");
jcb.addItem("EF");
jcb.addItem("AB");
jcb.addItem("CD");
jcb.addKeyListener(this);
this.getContentPane().add(jcb);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void keyPressed(KeyEvent e) {
// System.out.println(jcb.getSelectedIndex());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println(jcb.getSelectedIndex());
}
@Override
public void keyTyped(KeyEvent e) {
// System.out.println(jcb.getSelectedIndex());
}
}用滑鼠可以選擇,但用方向鍵就選擇不了了, 而且如果要通過itemStateChanged來判斷getSelectedIndex的話得到的是最先出現的索引值:即你選后一個AB,getSelectedIndex返回的卻是0。
既然這樣的話那JComboBox為什麽還允許接受重複數據呢?直接把用戶數據轉成Set不更好嗎?
JComboBox jcb;
public static void main(String...args){
new Test8();
}
public Test8(){
jcb = new JComboBox();
jcb.addItem("AB");
jcb.addItem("CD");
jcb.addItem("EF");
jcb.addItem("AB");
jcb.addItem("CD");
jcb.addKeyListener(this);
this.getContentPane().add(jcb);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void keyPressed(KeyEvent e) {
// System.out.println(jcb.getSelectedIndex());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println(jcb.getSelectedIndex());
}
@Override
public void keyTyped(KeyEvent e) {
// System.out.println(jcb.getSelectedIndex());
}
}用滑鼠可以選擇,但用方向鍵就選擇不了了, 而且如果要通過itemStateChanged來判斷getSelectedIndex的話得到的是最先出現的索引值:即你選后一個AB,getSelectedIndex返回的卻是0。
既然這樣的話那JComboBox為什麽還允許接受重複數據呢?直接把用戶數據轉成Set不更好嗎?
解决方案 »
- java String问题
- 使用HashSet<T>有什么 要求吗
- 跪求:JSP+Servlet+Java电子课件。
- 请问,swing中的控件可以是任意形状的吗?比如,斜线
- Struct格式保存的东东,用JAVA怎么处理
- 封装了一个collection后,怎么把这个collection对象的信息读出来?
- 哪有AWT和SWING的完整源码下载,谁能提供一些,在下万分感谢
- HashMap是什么东东?Map.Entry又是什么意思
- 在调用notes的library时,遇到如下的错误
- 常有人说java什么都能做,我作为一个初学者对此感到很困惑!
- 处理大量的二进制数据,大家伙们有没有好提议?
- 欲哭无泪,上班第一天就碰到难题,只有25分了,哪位大哥救救我啊(在java桌面应用中嵌入MATLAB)
public void addItem(Object anObject) Adds an item to the item list. This method works only if the JComboBox uses a mutable data model. Warning: Focus and keyboard navigation problems may arise if you add duplicate String objects. A workaround is to add new objects instead of String objects and make sure that the toString() method is defined. For example: comboBox.addItem(makeObj("Item 1"));
comboBox.addItem(makeObj("Item 1"));
...
private Object makeObj(final String item) {
return new Object() { public String toString() { return item; } };
}把你的成式改成這樣,你再試試看。public class Test8 extends JFrame implements KeyListener { JComboBox jcb; public static void main(String... args) {
new Test8();
} public Test8() {
jcb = new JComboBox();
jcb.addItem(new TestObj(1));
jcb.addItem(new TestObj(2));
jcb.addItem(new TestObj(3));
jcb.addItem(new TestObj(4));
jcb.addItem(new TestObj(5));
jcb.addKeyListener(this);
this.getContentPane().add(jcb);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} @Override
public void keyPressed(KeyEvent e) {
// System.out.println(jcb.getSelectedIndex());
} @Override
public void keyReleased(KeyEvent e) {
System.out.println(jcb.getSelectedIndex());
} @Override
public void keyTyped(KeyEvent e) {
// System.out.println(jcb.getSelectedIndex());
}
class TestObj{
private int id;
public TestObj(int i){
id=i;
}
public String toString(){
return "AB";
} @Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TestObj other = (TestObj) obj;
if (this.id != other.id) {
return false;
}
return true;
} @Override
public int hashCode() {
int hash = 5;
hash = 37 * hash + this.id;
return hash;
}
}
}