表行中的星级显示在表外

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

当我运行该项目时,表格行将正确显示,除了在表外和列内显示排行的排名是星形,如图所示:enter image description here

public ListTasksForm(Form previous) {
    SpanLabel sp = new SpanLabel();
    sp.setText(ServiceTask.getInstance().getAllArticles().toString());
    ArrayList<Articles> articles = ServiceTask.getInstance().getAllArticles();
    Object[][] rows = new Object[articles.size()][];
    for (int iter = 0; iter < rows.length; iter++) {
        rows[iter] = new Object[]{
            articles.get(iter).getName(), articles.get(iter).getDescription(), articles.get(iter).getLabel(), articles.get(iter).getQuantity(),
            articles.get(iter).getRating(), add(createStarRankSlider(articles.get(iter).getId_article()))
        };

    }
TableModel model = new DefaultTableModel(new String[]{"name", "description", "label", "quantity", "rating", "rate"}, rows);
            Table table = new Table(model);
            add(table);
            getToolbar().addMaterialCommandToLeftBar("", FontImage.MATERIAL_ARROW_BACK, e -> previous.showBack());
        }
    });

这是星级创建的功能

private Slider createStarRankSlider(int id) {
Slider starRank = new Slider();
starRank.setEditable(true);
starRank.setMinValue(0);
starRank.setMaxValue(10);
int fontSize = Display.getInstance().convertToPixels(3);
Font fnt = Font.createTrueTypeFont("Handlee", "Handlee-Regular.ttf").
        derive(fontSize, Font.STYLE_PLAIN);
Style s = new Style(0xffff33, 0, fnt, (byte) 0);
Image fullStar = FontImage.createMaterial(FontImage.MATERIAL_STAR, s).toImage();
s.setOpacity(100);
s.setFgColor(0);
Image emptyStar = FontImage.createMaterial(FontImage.MATERIAL_STAR, s).toImage();
initStarRankStyle(starRank.getSliderEmptySelectedStyle(), emptyStar);
initStarRankStyle(starRank.getSliderEmptyUnselectedStyle(), emptyStar);
initStarRankStyle(starRank.getSliderFullSelectedStyle(), fullStar);
initStarRankStyle(starRank.getSliderFullUnselectedStyle(), fullStar);
starRank.setPreferredSize(new Dimension(fullStar.getWidth() * 5, fullStar.getHeight()));
starRank.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        ServiceTask.getInstance().UpdateRank(id,starRank.getIncrements());

    }
});

return starRank;

}

java sql codenameone
1个回答
0
投票
您未包含initStarRankStyle的代码,但是您在这里所做的工作很明显。您只是依靠容器的行为。 Table派生为Container,因此它包括所有其方法,例如add(Component)

但是这些方法无法正常工作,因为表是从模型中获取其数据并在内部调用add。因此,您的逻辑与表冲突。

您需要派生表并定义您希望如何呈现这些数据。您可以按照protected Component createCell(Object value, int row, int column, boolean editable)的说明重写方法here来实现。

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