【问题标题】:Type of an ArrayList for Combobox and TextFields组合框和文本字段的 ArrayList 类型
【发布时间】:2013-07-08 16:48:44
【问题描述】:

我有一个ArrayList<JTextField>,它有 N 个职位。但是,我必须做出改变,我需要在该数组中添加一个JComboBox,所以我的问题是:

我需要在我的 ArrayList 上声明什么类型的数据?

我尝试过使用ArrayList<Object>ArrayList<JComponent>,但它不起作用,因为我设置水平对齐的线条报告错误。

private ArrayList<JTextField> jTextFieldAL;

for (int i = 0; i < size; i++) {
            jLabelAL.add(new JLabel("" + tagNamesAL.get(i))); 
            if (tagNamesAL.get(i).equals("AGENT_NAME")) {
                jTextFieldAL.add(new tools.AgentNameTextField());
                jTextFieldAL.get(i).setHorizontalAlignment(SwingConstants.RIGHT);
            } else {
                switch (tagContentAL.get(i).toString().toLowerCase()) { 
                    case "int":
                        jTextFieldAL.add(new tools.IntegerTextField(this.simul));
                        jTextFieldAL.get(i).setHorizontalAlignment(SwingConstants.RIGHT);
                        break;                                                    
                    case "double":
                    case "float":
                        jTextFieldAL.add(new tools.DoubleTextField(this.simul)); 
                        jTextFieldAL.get(i).setHorizontalAlignment(SwingConstants.RIGHT);
                        break;
                    default:
                        jTextFieldAL.add(new JTextField()); 
                        jTextFieldAL.get(i).setHorizontalAlignment(SwingConstants.RIGHT);
                        break;
                } 
            }

            jTextFieldAL.get(i).addKeyListener(keyEvent); 
            p1.add(jLabelAL.get(i));
            p1.add(jTextFieldAL.get(i));
        }

【问题讨论】:

  • 您是否尝试过使用 JComponent 但转换为例如JTextField 是否需要使用特定于文本的方法?
  • 1.简单的问题 - 什么目标,2. 如何帮助您将 JComponents 放入数组中,3. 不要将 KeyListener 用于 JTextComponents,4. 为了更好的帮助,请尽快发布 SSCCE,简短、可运行、可编译,
  • 对不起 mKorbel,我真的不能:\

标签: java swing polymorphism jtextfield jcombobox


【解决方案1】:

我尝试了 ArrayList 和 ArrayList 但它不起作用,因为我设置水平对齐的行报告错误:这是预期的,因为 Object/JComponent 没有 setHorizo​​ntalAlignment 方法。 因此,您需要将其转换为 JTextField,然后调用此 API。

我不确定这是否是一个好主意,因为要降低对象,你需要在每个索引处知道存储的对象的实际类型是什么类型(JTextFild 或 JComboBox),否则你会着陆使用 ClassCasteException。

【讨论】:

    【解决方案2】:

    我找到了解决问题的方法。我不需要将ComboBox 添加到ArrayList。我只是将ComboBox 直接添加到面板中。

    像这样:

    for (int i = 0; i < size; i++) {
                jLabelAL.add(new JLabel("" + tagNamesAL.get(i))); 
                if (tagNamesAL.get(i).equals("BEHAVIOUR")){
                    addCSPComboBox(p1);
                    break;
                }
    

    还有addCSPComboBox方法:

    public void addCSPComboBox(JPanel p1){
        CSPComboBox cspComboBox = new tools.CSPComboBox();
        JLabel behaviour = new JLabel("BEHAVIOUR");
        p1.add(behaviour);
        p1.add(cspComboBox);
    
    }
    

    这对我的问题很有效。我希望我可以帮助任何有同样问题的人;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2013-06-08
      • 1970-01-01
      相关资源
      最近更新 更多