更快的方式写下拉框的项目列表

时间:2013-10-08 08:55:17

标签: java arrays swing jcombobox

我正在学习Java并且正在与Swing合作。当我创建一个下拉框时,我创建了一个包含我想要显示为选项的数组。但是比方说,例如,我希望我的下拉框列出1900-2013年有没有更好更快的方式来列出这些数字而不是在一个庞大的数组中输入它们? 就像我可以说我想让数组保存2个参数之间的所有值?

4 个答案:

答案 0 :(得分:2)

  

当我创建一个下拉框时,我创建一个包含我的数组   想要作为选项出现。但是,比方说,我想要我的下拉   框列出1900-2013年

  • 使用JSpinnerSpinnerDateModel代替JComboBox

  • 否则你需要实现一些AutoCompete for JComboBox,因为具有1k项目的范围根本不是用户友好的,也不起作用,打扰这个对象中的选择

  • Date置于DefaultComboBoxModel而不是intInteger(代表年份),以便您使用Date instance用户选择

答案 1 :(得分:1)

这样的东西?从今年开始倒数到1900年。

List<String> years = new ArrayList<String>();
int thisyear =2013; //you could parse this out of a new Date() object instead
for (int y = thisYear; y >= 1900; y--) {
    years.add(Integer.toString(y));
}

答案 2 :(得分:1)

这些行中的某些内容应生成所需年份的ArrayList。

ArrayList<String> myArray = new ArrayList<>();
for(int i = 1900; i < 2014; i++){
    myArray.add(Integer.toString(i));
}

for(String s : myArray){
    System.out.println(s);
}

我认为生成这样的列表被称为动态创建它,或者“在运行时”。

答案 3 :(得分:1)

您可以使用不同的方法,而不仅仅是循环多年 例如,您可以为组合框创建自定义模型:

ComboBoxModel model = new DefaultComboBoxModel ()
{
    @Override
    public Object getElementAt ( int index )
    {
        return 1900 + index;
    }

    @Override
    public int getSize ()
    {
        return 114;
    }
};
JComboBox comboBox = new JComboBox ( model );

这应该足以生成所需的列表。

当然你也可以使用一个简单的数组作为数据:

Integer[] years = new Integer[ 114 ];
for ( int i = 0; i <= 113; i++ )
{
    years[ i ] = 1900 + i;
}
ComboBoxModel model = new DefaultComboBoxModel ( years );    
JComboBox comboBox = new JComboBox ( model );

每种方法都有其优点和缺点。

模型“方法”将在应用程序启动时消耗更少的资源(如果您的列表确实非常大),尽管每次组合框渲染器调用该值时您将生成值,或者您尝试检索它(至少在我的简单实现中 - 您可以添加值缓存,这将解决该问题。)

值“方法”在一些简单的情况下需要较少的编码和更明显。