2

我目前正在学习 Java 并使用 Swing。当我创建一个下拉框时,我会创建一个数组,其中包含我想要显示为选项的内容。但是,例如,我希望我的下拉框列出 1900-2013 年,有没有更好更快的方法来列出这些数字,而不是将它们全部输入一个庞大的数组中?就像我可以说我希望数组保存两个参数之间的所有值吗?

4

4 回答 4

2

当我创建一个下拉框时,我会创建一个数组,其中包含我想要显示为选项的内容。但是比如说,我希望我的下拉框列出 1900-2013 年

  • 使用JSpinnerSpinnerDateModel而不是JComboBox

  • 否则你将需要实现一些AutoCompete for JComboBox,因为 1k 项的范围根本不方便用户使用,也不工作,打扰了这个对象中的选择

  • 在您希望从用户选择中使用的情况下,放入DateDefaultComboBoxModel不是int或(代表年份)IntegerDate instance

于 2013-10-08T09:35:32.580 回答
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);
}

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

于 2013-10-08T09:03:40.427 回答
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));
}
于 2013-10-08T09:01:19.557 回答
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 );

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

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

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

于 2013-10-08T09:12:10.480 回答