JavaFX ListView - удалить интервалы / отступы / поля между ячейками - PullRequest
0 голосов
/ 26 августа 2018

Поскольку у меня есть пользовательских ячеек для определенного ListView, у меня большие проблемы с пониманием того, как убрать «естественный» вид поля / отступа между каждой ячейкой, и, что еще хуже, справа и слева от указанных ячеек.

Вот пример:

image to showcase spacing between cells] 1

Как видите, яиспользуйте цвет, чтобы выделить каждую клетку.Вы не можете видеть пространство в конце ячеек (с их правой стороны), потому что мне нужно прокрутить, но вы можете мне доверять, белое пространство одинаково на каждой стороне (хотя больше слева и справа, хотя ...), что не нормально, так как я специально разработал эти ячейки, чтобы их ширина была такой же, как у ListView, чтобы не было необходимости использовать горизонтальную прокрутку.Мои проблемы побеждают мою смелость ...

Каждая клетка состоит из одной AnchorPane с изображением и одной меткой.AnchorPane окрашен в желтый цвет (-fx-background-color: yellow;).

И, как вы можете ясно видеть, вокруг этих клеток есть белые пробелы.

К вашему сведению, здесь я использую JavaFX 8 / 2.2 SDK , но я собираюсь использовать JFoenix JFXListView & JFXListCell.Однако расстояние между ними еще хуже.

Странный вопрос: я также нарисовал ListView зеленым, но такого цвета нигде нет.чтобы увидеть.Я предполагаю, что все ячейки (и пустая) перезаписывают содержимое ListView, поэтому имеет смысл не видеть его фон.Однако это означает, что ячейки каким-то образом «повреждены», так как пробелы «добавлены» вокруг моих ячеек.

Я попытался установить отступ в 0 для всего, но безуспешно.

Наконецв методе onUpdateItem я вызываю супер-метод , и когда ячейка не помечается как пусто , я устанавливаю графический объект в вышеупомянутую AnchorPane, в противном случае я устанавливаю его в нуль, что явно соответствует моему скриншоту.

Спасибо за помощь!

1 Ответ

0 голосов
/ 26 августа 2018

Если вы посмотрите на таблицу стилей CSS по умолчанию для JavaFX, modena.css , вы увидите:

.list-cell {
    -fx-padding: 0.25em 0.583em 0.25em 0.583em; /* 3 7 3 7 */
}

Отсюда и отступ для ListCell. Чтобы удалить этот отступ, просто добавьте свою собственную таблицу стилей, которая содержит:

.list-cell {
    -fx-padding: 0px;
}

Или позвоните setStyle для каждого из ваших ListCell s:

setStyle("-fx-padding: 0px;");

Второй вариант лучше всего сделать с помощью пользовательской фабрики ячеек .

listView.setCellFactory(v -> new ListCell<>() {

    {
        setStyle("-fx-padding: 0px");
    }

    @Override
    protected void updateItem(Object item, boolean empty) {
        super.updateItem(item, empty);
        if (empty || item == null) {
            setText(null);
            setGraphic(null);
        } else {
            // your custom display logic
        }
    }

});

Кроме того, после некоторого быстрого тестирования с JFoenix похоже, что использование вышеописанного также будет работать для JFXListCell; хотя вы должны быть осторожны с переопределением updateItem, потому что JFXListCell делает много в его реализации.

...