如何保存用户输入和JComboBox选择?

时间:2012-04-19 20:18:52

标签: java swing jcombobox jtextfield

我正在开发我的第一个(非常基础的)Java应用程序。我在保存用户信息方面遇到了麻烦;具体而言,将用户输入从文本字段附加到JComboBox选择。我该怎么做呢?截至目前,我有:

String comps[] = {Computer 1, Computer 2, Computer 3}; //array for JComboBox
jcbb = new JComboBox<String>(comps); //create JComboBox

if (ae.getActionCommand().equals("Save")) { //user hits the Save button

        StringBuilder sb = new StringBuilder(); //string to hold data
        sb.append((String) macTF.getText()); //get data from textfield
        sb.append(" ");
        sb.append((String) jcbb.getSelectedItem()); //get JComboBox item
        sb.append(" ");
        //***what to do with the held data?***
    }

我知道我错过了很多,但只是朝着正确的方向推进会有所帮助。我一直在搜索书籍和网络,并找到了很多不同的答案,但我不能应用它们。我是否将StringBuilder输出到文本文件并加载?或者构建一个数组如何使用这两组数据?还是完全不同的东西?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用addItem方法(doc):

if (ae.getActionCommand().equals("Save")) { //user hits the Save button
    String toAdd = (String) macTF.getText(); //get data from textfield
    jcbb.addItem(toAdd); //add String to the combo box
}

另外你会遇到问题:

String comps[] = {Computer 1, Computer 2, Computer 3}; //array for JComboBox
jcbb = new JComboBox<String>(comps); //create JComboBox

应该是:

String comps[] = {"Computer 1", "Computer 2", "Computer 3"}; //array for JComboBox
jcbb = new JComboBox(comps); //create JComboBox

答案 1 :(得分:0)

所以可能的解决方案如下,但缺点是由于元素的添加/删除和选择的变化,它会产生大量事件。但是,这就是您要寻找的行为

public <E> void replaceComboBoxItem( JComboBox<E> combo, E itemToReplace, E replacement ){
   boolean selected = combo.getSelectedItem() == itemToReplace;
   combo.insertItemAt( replacement, indexOf( combo, itemToReplace ) );
   combo.removeItem( itemToReplace );
   if ( selected ){
      combo.setSelectedItem( itemToReplace );
   }
}
private <E> int indexOf( JComboBox<E> combo, E item ){
  for( int i =0; i < combo.getItemCount(); i++ ){
    if ( combo.getItemAt( i ).equals( item ) ){
       return i;
    }
  }
  return -1;
}

然后你可以使用

replaceComboBoxItem( jcbb, jcbb.getSelectedItem(), sb.toString() );

注意:代码只是在这里输入,可能包含很小的语法错误