提问者:小点点

添加到数据库,并在输入时编辑ComboBoxModel…使用键侦听器?


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

最好的方法是什么?

我读过关于可编辑组合框的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);
        }
    }
});

当我键入一个新名称并按回车键时,它什么也不做。组合框上没有新的数据库条目和附加选项。我没有将操作命令附加到组合框,因为我认为上面的示例假设它将把它作为默认值,我也是。

但是,当我按回车键时,焦点在组合框上,如何让它喊出该操作命令?我本以为组合框会有某种默认行为来喊出它?我需要使用if(playerNameComboBox. hasFocus())语句吗?当我的组合框有Focus()时,我应该实现某种键监听器吗?

我对Java很陌生,所以我不确定这种事情应该怎么做;非常感谢任何帮助。


共1个答案

匿名用户

根据要求,这是我的简短示例,其中可以将名称添加到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);
    }
}