Quero ter uma classe de estilo especial para um ComboBox que eu possa reutilizar. Por exemplo, quero criar uma classe yellowed
que fornecerá um fundo amarelo. Este é meu código:
Java:
public class NewMain extends Application {
@Override
public void start(Stage primaryStage) {
ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().addAll("Option 1", "Option 2", "Option 3");
comboBox.getStyleClass().add("yellowed");
VBox vbox = new VBox(comboBox);
Scene scene = new Scene(vbox, 400, 300);
scene.getStylesheets().add(NewMain.class.getResource("test.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
CSS:
.combo-box.yellowed {
-fx-background-color: yellow;
}
.combo-box-popup.yellowed > .list-view > .virtual-flow > .clipped-container > .sheet > .list-cell {
-fx-background-color: yellow;
}
O problema é que o pop-up (do meu ComboBox com yellowed
classe de estilo) que será exibido não terá uma yellowed
classe.
Alguém poderia dizer se existe uma maneira de adicionar uma classe de estilo ao pop-up de um ComboBox específico?
O pop-up é considerado um descendente do
ComboBox
1. Isso é documentado pelo JavaFX CSS Reference Guide :Então, tudo o que você precisa fazer é:
Tecnicamente,
combo-box.yellowed .list-cell
é suficiente, mas observe que também terá como alvo o nó usado para exibir a caixa de combinação real (ou seja, a "célula de botão" , que também é umListCell
). E, claro, você pode tornar o seletor mais específico se quiser/precisar.Aqui está um exemplo executável:
Observe que o exemplo, conforme escrito, requer Java 21+ e JavaFX 17+.
1. Para os curiosos, isso é implementado substituindo
PopupControl#getStyleableParent()
para retornar o controle.