Codename one error : java.lang.IllegalArgumentException: Component is already contained in Container
Codename one error : java.lang.IllegalArgumentException: Component is already contained in Container
这是我在 运行 项目时遇到的错误:
java.lang.IllegalArgumentException: Component is already contained in Container
这是因为 Button
s 的声明在 createcell
方法之外,但问题是如果我在方法内部声明它们 ActionListener
不起作用
Button eval = new Button("Evaluate");
Button img = new Button("See image");
Object[][] rows = new Object[articles.size()][];
for (int iter = 0;
iter < rows.length;
iter++) {
rows[iter] = new Object[]{
articles.get(iter).getName(),
0,
articles.get(iter).getDescription(),
articles.get(iter).getLabel(),
articles.get(iter).getQuantity(),
articles.get(iter).getRating(), 0
};
}
TableModel model = new DefaultTableModel(new String[]{"name", "description", "Image", "label", "quantity", "rating", "rate"}, rows);
Table table = new Table(model) {
@Override
protected Component createCell(Object value, int row, int column, boolean editable) {
if (row > -1 && column == 2) {
return img;
}
if (row > -1 && column == 6) {
return eval;
}
eval.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
Dialog.show("thank you for rating our product ", createStarRankSlider(5), new Command("Cancel"));
}
});
value.toString();
img.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
Dialog.show("HAY LIMAGE", "Insert image here", new Command("Cancel"));
}
});
return super.createCell(value, row, column, editable);
}
};
add(table);
您正在返回组件的相同实例,而不是创建新实例。您必须始终在此方法中创建一个组件。
例如为 table 的单元格 1,1 调用此方法。 Returns 图片。然后对于 1,2 和 returns img... 因为 img 已经有一个父组件,所以这将失败。
这是我在 运行 项目时遇到的错误:
java.lang.IllegalArgumentException: Component is already contained in Container
这是因为 Button
s 的声明在 createcell
方法之外,但问题是如果我在方法内部声明它们 ActionListener
不起作用
Button eval = new Button("Evaluate");
Button img = new Button("See image");
Object[][] rows = new Object[articles.size()][];
for (int iter = 0;
iter < rows.length;
iter++) {
rows[iter] = new Object[]{
articles.get(iter).getName(),
0,
articles.get(iter).getDescription(),
articles.get(iter).getLabel(),
articles.get(iter).getQuantity(),
articles.get(iter).getRating(), 0
};
}
TableModel model = new DefaultTableModel(new String[]{"name", "description", "Image", "label", "quantity", "rating", "rate"}, rows);
Table table = new Table(model) {
@Override
protected Component createCell(Object value, int row, int column, boolean editable) {
if (row > -1 && column == 2) {
return img;
}
if (row > -1 && column == 6) {
return eval;
}
eval.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
Dialog.show("thank you for rating our product ", createStarRankSlider(5), new Command("Cancel"));
}
});
value.toString();
img.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
Dialog.show("HAY LIMAGE", "Insert image here", new Command("Cancel"));
}
});
return super.createCell(value, row, column, editable);
}
};
add(table);
您正在返回组件的相同实例,而不是创建新实例。您必须始终在此方法中创建一个组件。
例如为 table 的单元格 1,1 调用此方法。 Returns 图片。然后对于 1,2 和 returns img... 因为 img 已经有一个父组件,所以这将失败。