2

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

最好的方法是什么?

我已经阅读了关于Editable ComboBoxes的 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);
        }
    }
});

当我输入一个新名称并按回车键时,它什么也不做。ComboBox 上没有新的数据库条目和附加选项。我没有将动作命令附加到 ComboBox 上,因为我认为上面的示例假定它会将其作为默认设置,我也是如此。

但是当我按下回车键时,如何让它喊出那个动作命令,重点放在组合框上?我会认为组合框会有某种默认行为来喊出来?我需要使用if(playerNameComboBox.hasFocus())声明吗?当我的组合框 hasFocus() 时,我应该实现某种 keylistener 吗?

我是 Java 的新手,所以我不确定应该如何做这种事情;很感谢任何形式的帮助。

4

1 回答 1

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);
    }
}
于 2012-07-26T15:35:11.367 回答