允许JComboBox接受List <string>或HashMap而不是String [] </string>

时间:2014-08-23 20:23:26

标签: java swing jcombobox comboboxmodel

当我在JTables中输入一个新的Student对象时,我希望将所有的地方/城市都放在我的JComboBox中。每个城市都存储在HashMap内,其中包含名称作为密钥(因为没有重复项)和它的邮政编码。

示例:hashMap.put("City", "AAA")

现在我的问题是在JComboBox本身内代表HashMap OR List<String>。便宜又简单的替代方法就是简单地重写String[]以保存所有城镇名称和switch-case所选值,但是几乎没有问题:

  1. 时间过长,增加新的地方可能是痛苦或浪费时间
  2. 很多不必要的代码
  3. 如果被某人审核,看起来很可怕
  4. 可能比我提议的方法慢

1 个答案:

答案 0 :(得分:1)

你走了:

 String [] string = {"city","town","country","province"};
 java.util.List<String> list = new ArrayList<String>(Arrays.asList(string));


 Object[] arrayObject= list.toArray();
 String [] data = Arrays.copyOf(arrayObject, arrayObject.length,String[].class); // java 1.6+
 JComboBox<String> combo = new JComboBox<>( data);

实际上你可以这样做:

 String [] string = {"city","town","country","province"};
 java.util.List<String> list = new ArrayList<String>(Arrays.asList(string));


 JComboBox< java.util.List<String>> combo = new JComboBox<>( );
 combo.addItem(list);

但是,JComboxBox的每个元素都将连续保存列表的所有元素。

*防止java.util.List和{}之间的歧义java.awt.List,我们应该清楚地宣布它们。

这里是完整的演示:

import java.awt.*;
import javax.swing.*;
import java.util.*;

public class ComboBoxDemo extends JFrame {
public ComboBoxDemo() {

  super("JComboBox Demo");

    String [] string = {"city","town","country","province"};
  java.util.List<String> list = new ArrayList<String>(Arrays.asList(string));


 Object[] arrayObject= list.toArray();
 String [] data = Arrays.copyOf(arrayObject, arrayObject.length,String[].class); // java 1.6+
 JComboBox<String> combo = new JComboBox<>( data);

    setLayout(new FlowLayout(FlowLayout.CENTER));
    add(combo, BorderLayout.CENTER);      
}

 public static void main(String[] args) {
      ComboBoxDemo g = new ComboBoxDemo();
    g.setVisible(true);
    g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    g.setBounds(100, 100, 300, 300);
 }
 }

enter image description here

的结果

JComboBox< java.util.List<String>> combo = new JComboBox<>( ); combo.addItem(list);

声明:

enter image description here