0

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

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

我尝试使用ArrayList<Object>andArrayList<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));
        }
4

2 回答 2

0

我找到了解决我的问题的方法。我不需要添加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);

}

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

于 2013-07-08T18:28:12.477 回答
0

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

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

于 2013-07-08T17:00:15.537 回答