Java 添加到数据库,并在';输入';用按键侦听器按?

Java 添加到数据库,并在';输入';用按键侦听器按?,java,swing,Java,Swing,当我在comboBox中输入一个新名称时,我想添加到数据库和我的可编辑ComboxModel。我有添加到数据库的方法,我只是想让它以某种方式监听添加到组合框中的条目 最好的方法是什么? 我已经阅读了上的Java教程,并注意到其中提到: 当用户从菜单中选择项目并键入Enter时,可编辑组合框将触发操作事件。请注意,当用户在组合框中输入值时,菜单保持不变。如果需要,您可以轻松编写一个操作侦听器,每当用户键入唯一值时,该侦听器会向组合框的菜单添加一个新项 所以我想,好吧,让我们试试这个,然后查一些。这

当我在comboBox中输入一个新名称时,我想添加到数据库和我的可编辑ComboxModel。我有添加到数据库的方法,我只是想让它以某种方式监听添加到组合框中的条目

最好的方法是什么?

我已经阅读了上的Java教程,并注意到其中提到:

当用户从菜单中选择项目并键入Enter时,可编辑组合框将触发操作事件。请注意,当用户在组合框中输入值时,菜单保持不变。如果需要,您可以轻松编写一个操作侦听器,每当用户键入唯一值时,该侦听器会向组合框的菜单添加一个新项

所以我想,好吧,让我们试试这个,然后查一些。这是我的尝试,基本上是复制粘贴出我发现的示例,使用我的变量名:

playerNameComboBox.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("comboBoxEdited")) {
            System.out.println("Adding new player!");
            IController.Util.getInstance().addNewPlayer();
            playerNameComboBox.insertItemAt(playerNameComboBox.getSelectedItem(), 0);
        }
    }
});
当我键入一个新名称,然后按enter键时,它不会执行任何操作。组合框上没有新的数据库条目和附加选项。我没有将动作命令附加到ComboBox上,因为我认为上面的示例假设它会将其作为默认值,我也是这样做的

但是,当我按下enter键时,如何让它在组合框上大声喊出动作命令呢?我本以为ComboBox会有某种默认行为来大声疾呼呢?我是否需要使用
if(playerNameComboBox.hasFocus())
语句?当我的组合框有focus()时,我应该实现某种类型的keylistener吗


我对Java非常陌生,所以我不确定应该如何做这类事情;非常感谢您的帮助。

根据您的要求,下面是我的简短示例,其中的名称可以添加到JComboBox中

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Test extends JFrame {

    private JComboBox box;

    public static void main(String[] args) {
        new Test();
    }

    public Test()
    {
        super();
        setSize(200, 100);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        box = new JComboBox();
        box.setEditable(true);
        getContentPane().add(box);

        box.addActionListener(new ActionListener() { 
            @Override 
            public void actionPerformed(ActionEvent e) { 
                if (e.getActionCommand().equals("comboBoxEdited")) { 
                    System.out.println("Adding new player!");
                    box.insertItemAt(box.getSelectedItem(), 0);
                } 
            } 
        });

        setVisible(true);
    }
}

您的侦听器和
actionPerformed()
看起来不错。您是否记得调用
playerNameComboBox.setEditable(true)?是的,我有。看我的即将被编辑。我明白了。按enter键时,控制台上是否也没有任何信息?我写了一个简短的测试程序,除了数据库调用之外,其他都用了,它工作得很好。如果你愿意的话,我可以把它贴在回答中。@JosephKendall没什么,我希望在回答中看到SSCE,但记住,动作听众不会因为焦点丢失而被解雇。这看起来就像我的代码一样,我明天会看一看工作,看看是否还有其他东西不工作。我只是在家里运行了这个,+1它工作。我会看看这是否与我明天工作时的代码不同。我意识到我的错误:我正在使用,这意味着我需要做一些更改。现在用这个答案就行了。啊,是的
将引用内部类本身,而
类名。此
(使用您的类名,而不是字面上的“类名”)仍可用于引用外部类。我以前犯过那个错误。不过,很高兴你把事情弄明白了。