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不更好嗎?
解决方案 »
- 新人学J2se,给个学习方法和学习流程,谢谢!
- SAX解析特殊的xml
- 程序界面的刷新问题
- 关于 java.util.List 问题
- 如何從mysql數據庫A中讀出big5編碼的數據再存儲到mysql數據庫B中用utf-8編碼存儲?
- java网络传输问题
- [在线等]用JBuilder连SQL的问题?
- 懂 AWT 的近来看看
- 请问如何连接java和SQL2000?驱动程序的名称叫什么?
- 我現在用PB+SQLSERVER做企業數據庫開發,想學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;
}
}
}