Изменить внешний вид элементов управления PopSver в JavaFX

Я хочу настроить внешний вид элемента управления PopOver в JavaFX. У меня есть кнопка, которая при нажатии появляется PopOver. Вот функциональный пример:

package pruebapopover;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.controlsfx.control.PopOver;

public class PruebaPopOver extends Application {

    @Override
    public void start(Stage primaryStage) {
        PopOver popover = new PopOver();     
        TextField campo = new TextField();      
        popover.setContentNode(campo);

        Button btn = new Button();
        btn.setText("Abrir PopOver");
        btn.setOnAction((ActionEvent event) -> {           
            popover.show(btn);

            ((Parent) popover.getSkin().getNode()).getStylesheets()
                .add(getClass().getResource("PopOver.css").toExternalForm());                   
        });         

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);            
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}

И PopOver.css:

.popover {       
    -fx-background-color: rgba(255,0,0, 0.1);  /* rojo semitransparente */                                     
}
.popover > .content {
        -fx-padding: 10;                        
        -fx-background-color: transparent;                        
}

Результат:

Botón mostrando un popover

Но что я ожидал, это: popover personalizado

Как удалить белый фон? Почему он не выглядит полупрозрачным? Как мне покрасить стрелку в красный?

0
задан 01.04.2016, 16:42
1 ответ

Визуальный аспект PopOver, которые мы видим на экране, - один Path, в который есться aГ±adido класс стиля border:

path = new Path();
        path.getStyleClass().add("border"); //$NON-NLS-1$
        path.setManaged(false);

Следовательно, в файле .CSS мы заменяем .popover {-fx-background-color: rgba (255,0,0,0.1); } из-за:

.popover > .border {
    -fx-stroke: linear-gradient(to bottom, rgba(0,0,0, .3), rgba(0, 0, 0, .7)) ;
    -fx-stroke-width: 0.5;
    -fx-fill: rgba(255,0,0, .5); /* <-- NUEVO */
    -fx-effect: dropshadow(gaussian, rgba(0,0,0,.2), 10.0, 0.5, 2.0, 2.0);
}
0
ответ дан 24.11.2019, 14:40