我有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));
}
答案 0 :(得分:0)
我尝试过使用ArrayList和ArrayList,但它不起作用,因为我设置水平对齐报告错误的行:这是预期的,因为Object / JComponent没有setHorizontalAlignment方法。 因此,您需要将其关联到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);
}
这对我的问题很好。我希望我可以帮助任何有同样问题的人;)