Combobox和TextFields的ArrayList类型

时间:2013-07-08 16:48:45

标签: java swing polymorphism jtextfield jcombobox

我有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));
        }

2 个答案:

答案 0 :(得分:0)

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

我不确定这是否是一个好主意,至于关闭对象,你需要知道每个索引是什么类型的存储对象的实际类型(JTextFild或JComboBox),否则你将登陆使用ClassCasteException。

答案 1 :(得分:0)

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

像这样:

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

}

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