我目前正在学习 Java 并使用 Swing。当我创建一个下拉框时,我会创建一个数组,其中包含我想要显示为选项的内容。但是,例如,我希望我的下拉框列出 1900-2013 年,有没有更好更快的方法来列出这些数字,而不是将它们全部输入一个庞大的数组中?就像我可以说我希望数组保存两个参数之间的所有值吗?
问问题
1387 次
4 回答
2
当我创建一个下拉框时,我会创建一个数组,其中包含我想要显示为选项的内容。但是比如说,我希望我的下拉框列出 1900-2013 年
否则你将需要实现一些
AutoCompete for JComboBox
,因为 1k 项的范围根本不方便用户使用,也不工作,打扰了这个对象中的选择在您希望从用户选择中使用的情况下,放入
Date
而DefaultComboBoxModel
不是int
或(代表年份)Integer
Date 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 回答