Java 我的jComboBox对我的keyListener和actionPerform执行的内容没有反应

Java 我的jComboBox对我的keyListener和actionPerform执行的内容没有反应,java,swing,jcombobox,listeners,comboboxmodel,Java,Swing,Jcombobox,Listeners,Comboboxmodel,我试图搜索用户名并将值返回到jComboBox,下面是代码 public void actionPerformed(java.awt.event.ActionEvent e) { sr = new Search(((String) jComboBoxReceiver.getSelectedItem())); usrList = sr.searchUser(); String[] userList = new String[usrList.size()] ;

我试图搜索用户名并将值返回到jComboBox,下面是代码

public void actionPerformed(java.awt.event.ActionEvent e) {
    sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
    usrList = sr.searchUser();
    String[] userList = new String[usrList.size()] ;
    for(int i=0;i<usrList.size();i++){
        userList[i]= usrList.get(i).getUserName();
    }
    model = new DefaultComboBoxModel(userList);
    jComboBoxReceiver.setModel(model);
}
public void actionPerformed(java.awt.event.ActionEvent e){
sr=新搜索(((字符串)jcomboxReceiver.getSelectedItem());
usrList=sr.searchUser();
String[]userList=新字符串[usrList.size()];

对于(inti=0;iIMO),真正让用户感到困惑的是,一旦用户选择了组合框的一个选项,组合框的内容和选择就会发生变化

无论如何,如果您确实想这样做,那么您应该在更改其内容之前删除(或停用)动作侦听器,并在以下情况后重新添加(或重新激活):

public void actionPerformed(java.awt.event.ActionEvent e){
sr=新搜索(((字符串)jcomboxReceiver.getSelectedItem());
usrList=sr.searchUser();
String[]userList=新字符串[usrList.size()];

对于(inti=0;iIMO),真正让用户感到困惑的是,一旦用户选择了组合框的一个选项,组合框的内容和选择就会发生变化

无论如何,如果您确实想这样做,那么您应该在更改其内容之前删除(或停用)动作侦听器,并在以下情况后重新添加(或重新激活):

public void actionPerformed(java.awt.event.ActionEvent e){
sr=新搜索(((字符串)jcomboxReceiver.getSelectedItem());
usrList=sr.searchUser();
String[]userList=新字符串[usrList.size()];

对于(int i=0;i哇,您每次都在重建ComboBoxModel?这不是有点贵吗?您知道有一个,也是由
defaultComboxModel
实现的,它允许您在combobox中添加/删除元素,而无需每次重建其模型

关于你的问题,我不明白这个说法

但是,如果我这样做,它确实会正确执行,但是,它会再次搜索第一个项目

你的意思是你的JComboBox开始闪烁,每次内容都被修改

如果是这样,可能是因为您的
ActionListener
链接到
JComboBox
,内容会不断变化

无论如何,我建议你添加一些日志,比如

sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
DefaultComboBoxModel model = (DefaultComboBoxModel) jComboBoxReceiver.getModel();
model.remvoeAllElements();
usrList = sr.searchUser();
String[] userList = new String[usrList.size()] ;
for(int i=0;i<usrList.size();i++){
    String username = usrList.get(i).getUserName();
    System.out.println(username); // feel free to instead use one loger
    model.addElement(username);
}
sr=newsearch(((字符串)jcomboxreceiver.getSelectedItem());
DefaultComboxModel=(DefaultComboxModel)jComboxReceiver.getModel();
model.remvoeallements();
usrList=sr.searchUser();
String[]userList=新字符串[usrList.size()];

对于(int i=0;i哇,您每次都在重建ComboBoxModel?这不是有点贵吗?您知道有一个,也是由
defaultComboxModel
实现的,它允许您在combobox中添加/删除元素,而无需每次重建其模型

关于你的问题,我不明白这个说法

但是,如果我这样做,它确实会正确执行,但是,它会再次搜索第一个项目

你的意思是你的JComboBox开始闪烁,每次内容都被修改

如果是这样,可能是因为您的
ActionListener
链接到
JComboBox
,内容会不断变化

无论如何,我建议你添加一些日志,比如

sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
DefaultComboBoxModel model = (DefaultComboBoxModel) jComboBoxReceiver.getModel();
model.remvoeAllElements();
usrList = sr.searchUser();
String[] userList = new String[usrList.size()] ;
for(int i=0;i<usrList.size();i++){
    String username = usrList.get(i).getUserName();
    System.out.println(username); // feel free to instead use one loger
    model.addElement(username);
}
sr=newsearch(((字符串)jcomboxreceiver.getSelectedItem());
DefaultComboxModel=(DefaultComboxModel)jComboxReceiver.getModel();
model.remvoeallements();
usrList=sr.searchUser();
String[]userList=新字符串[usrList.size()];

对于(int i=0;i您需要在编辑器上设置侦听器,而不是组合框本身。请参见此处的答案:


您需要在编辑器上设置侦听器,而不是组合框本身。请参见此处的答案:


非常感谢……问题是,我们的讲师只教我们基本概念,ListcellRenderer和MutableModelEvent有点太复杂了……哈哈,请原谅我这么粗鲁,但你们知道,所有这些Java文档都可以直接从JComboBox页面上获得。因此,作为一名专业开发人员,我希望你们能阅读这些文档非常感谢,问题是,我们的讲师只教我们基本的概念,ListcellRenderer和MutableModelEvent有点太复杂了…哈哈,感谢我这么粗鲁,但你们知道,所有这些Javadoc都可以直接从JComboBox页面上获得。因此,作为一名专业开发人员,我希望你们阅读这些d记录并使用它们。
sr = new Search(((String) jComboBoxReceiver.getSelectedItem()));    
DefaultComboBoxModel model = (DefaultComboBoxModel) jComboBoxReceiver.getModel();
model.remvoeAllElements();
usrList = sr.searchUser();
String[] userList = new String[usrList.size()] ;
for(int i=0;i<usrList.size();i++){
    String username = usrList.get(i).getUserName();
    System.out.println(username); // feel free to instead use one loger
    model.addElement(username);
}