代号一错误:java.lang.IllegalArgumentException。组件已经包含在容器中

问题描述 投票:1回答:1

这是我运行项目时得到的错误。

java.lang.IllegalArgumentException: Component is already contained in Container

这是因为decalaration of the Buttons在外面 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);
java codenameone
1个回答
1
投票

你返回的是同一个组件的实例,而不是创建一个新的实例。你必须总是在这个方法中创建一个组件。

例如,这个方法是为表格的单元格1,1调用的。返回img。然后对1,2再次返回img...。由于img已经有了一个父组件,这将会失败。

© www.soinside.com 2019 - 2024. All rights reserved.