如何在JavaFX中更改已禁用ListView的样式?

时间:2017-02-02 03:51:22

标签: java css javafx

我试图让被禁用的ListView看起来与非禁用的ListView相同。

我查了一下,发现你必须将不透明度设置为1,并尝试了许多方法,有和没有样式表,但似乎都没有。我试过了:

listView.setStyle("-fx-opacity: 1.0;");

.listView:disabled {
    -fx-opacity: 1.0;
}

.listView .list-cell {
    -fx-opacity: 1.0;
}

.listView .list-cell:disabled {
    -fx-opacity : 1.0;
}

我也尝试将背景颜色设置为白色,但由于某种原因,这会使文本隐身,即使没有其他颜色可以做到这一点。我该怎么做呢?感谢。

1 个答案:

答案 0 :(得分:0)

disabled伪类中设置不透明度(正如您所提到的)应该足够了:

.list-view:disabled {
    -fx-opacity: 1;
}

不要忘记将样式表添加到Scene

scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

举个例子:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {

        BorderPane root = new BorderPane();
        Scene scene = new Scene(root, 400, 400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

        ListView<String> lw = new ListView<>();
        lw.setItems(FXCollections.observableArrayList("dog", "cat", "whale"));
        lw.setDisable(true);
        root.setCenter(lw);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

并且CSS选择器包含在文件application.css中,并且此文件与Application类文件放在同一目录中。

注意:如果您希望选区看起来也一样,您也可以定义以下选择器:

.list-cell:disabled,
.list-cell:disabled,
.list-view:disabled {
    -fx-opacity: 1;
}