当我在组合框中输入新名称时,我想添加到数据库和我的可编辑组合框模型中。我有添加到数据库的方法,我只是想让它以某种方式监听添加到组合框中的条目。
最好的方法是什么?
我读过关于可编辑组合框的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很陌生,所以我不确定这种事情应该怎么做;非常感谢任何帮助。
根据要求,这是我的简短示例,其中可以将名称添加到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);
}
}