Звезды в строке таблицы отображаются вне таблицы - PullRequest
1 голос
/ 09 мая 2020

, когда я запускаю проект, строки таблицы отображаются правильно, за исключением звездочек, которые отображаются за пределами таблицы, а внутри колонны отображается текст, как показано на изображении: 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;

}

1 Ответ

0 голосов
/ 10 мая 2020

Вы не включили код для initStarRankStyle, но совершенно очевидно, что вы здесь сделали. Вы просто полагались на поведение контейнера. Table наследует Container, поэтому включает все его методы, например, add(Component).

Но эти методы не будут работать правильно, поскольку таблица извлекает свои данные из модели и вызывает add внутри. Итак, вы logi c конфликтует с таблицей.

Вам нужно создать таблицу и определить, как вы хотите, чтобы эти данные отображались. Вы можете сделать это, переопределив метод protected Component createCell(Object value, int row, int column, boolean editable), как описано здесь .

...