【问题标题】:Quicker Way To Write List of Items For Drop-Down Boxes为下拉框编写项目列表的更快方法
【发布时间】:2013-10-08 08:55:17
【问题描述】:

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

【问题讨论】:

  • for 循环填充数组/列表怎么样?

标签: java arrays swing jcombobox


【解决方案1】:

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

  • 使用JSpinnerSpinnerDateModel 而不是JComboBox

  • 否则您将需要实现 AutoCompete for JComboBox 中的一些内容,因为包含 1k 个项目的范围根本不方便用户使用,也无法正常工作,打扰了此对象中的选择

  • 如果您想从用户选择中使用Date instance,则将Date 放入DefaultComboBoxModel 而不是intInteger(代表年份)

【讨论】:

  • 嗯,有趣..我也会尝试这种方式。
【解决方案2】:

这样的?从今年倒数到 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));
}

【讨论】:

    【解决方案3】:

    类似的东西应该生成一个所需年份的 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);
    }
    

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

    【讨论】:

    • 感谢这个答案完美,正是我所需要的。
    • @ruffles 可能不会 - 如果您想对选定的年份做某事,您不想将其转换回整数 :-) 或者换句话说:添加项目(通常具有特定类型的对象)并让渲染器处理视觉效果,例如其字符串表示(相对于直接添加字符串 rep)
    【解决方案4】:

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

    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 );
    

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

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

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

    【讨论】:

    • 最好不要混淆新手:第一个是 DefaultComboBoxModel 的一个特别糟糕的扩展 - 它既可变又可修改,如果不覆盖这些方法,它的通知会混淆听众
    猜你喜欢
    • 2018-09-11
    • 2015-09-04
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多