JavaFX - изменение FocusModel ListView - PullRequest
0 голосов
/ 14 июля 2020

У меня есть ListView, и в настоящее время я переопределяю SelectionModel, чтобы предотвратить выбор элементов, но когда вы пытаетесь выбрать элемент, он все еще показывает схему.

При чтении через API я обнаружил, что Я могу сделать то же самое, но на этот раз переопределив FocusModel с помощью

    listView.setFocusModel(new SettingsFocusModel<VBox>());

А вот мой SettingsFocusModel

public class SettingsFocusModel<T> extends FocusModel<T> {
    @Override
    protected int getItemCount() {
        return 0;
    }

    @Override
    protected T getModelItem(int index) {
        return null;
    }
}

Однако он не работает так, как предполагалось. Я все еще вижу схему, как будто я не переопределил FocusModel. Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Вы можете изменить свой ListView CSS, чтобы предотвратить это:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        ListView<String> listView = new ListView<>();
        listView.getStyleClass().add("list-view-unselect");
        listView.getItems().add("Item 1");
        listView.getItems().add("Item 2");
        listView.getItems().add("Item 3");

        VBox vbox = new VBox(listView);
        Scene scene = new Scene(vbox, 640, 480);
        scene.getStylesheets().add("style.css");
        stage.setScene(scene);
        stage.setTitle("JavaFX App");
        stage.show();

    }

    public static void main(String[] args) {
        launch();
    }
}

И стиль. css:

.list-view-unselect .list-cell:filled:selected:focused,
.list-view-unselect .list-cell:filled:selected {
    -fx-background-color: white;
    -fx-text-fill: black;
}

.list-view-unselect .list-cell:even {
    -fx-background-color: white;
    -fx-text-fill: black;
}
.list-view-unselect .list-cell:odd {
    -fx-background-color: white;
    -fx-text-fill: black;
}
1 голос
/ 14 июля 2020

Для моего случая c я в итоге сделал следующее:

listView.setSelectionModel(new SettingsSelectionModel<VBox>());
listView.getStyleClass().add("settings-view");

SettingsSelectionModel следует за следующим ответом: { ссылка }

My css файл включает:

    .list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:focused {
    -fx-background-color: null;
}

.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:hover {
    -fx-background-color: null;
}

.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected {
    -fx-background-color: null;
}

Я решил каждый раз устанавливать цвет фона равным нулю, потому что это работает как в темном, так и в светлом режимах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...