为 ControlsFX PopOver 控件设置 JavaFX 的外观
Skining a ControlsFX PopOver control 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("Lanch 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); /* semi-transparent red */
}
.popover > .content {
-fx-padding: 10;
-fx-background-color: transparent;
}
结果如下:
Popover displayed incorrectly
但我期望的是:
PopOver displayed correctly
如何去除PopOver
控件的白色背景?,为什么不显示半透明?,如何绘制红色箭头?
我们在屏幕上看到的 popover
的视觉方面是 Path
添加了 class border
样式:
path = new Path();
path.getStyleClass().add("border");
因此 .css
文件将显示为:
.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, 0.5); /* instead -fx-background-color */
-fx-effect: dropshadow(gaussian, rgba(0,0,0,.2), 10.0, 0.5, 2.0, 2.0);
}
我想自定义 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("Lanch 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); /* semi-transparent red */
}
.popover > .content {
-fx-padding: 10;
-fx-background-color: transparent;
}
结果如下: Popover displayed incorrectly
但我期望的是: PopOver displayed correctly
如何去除PopOver
控件的白色背景?,为什么不显示半透明?,如何绘制红色箭头?
我们在屏幕上看到的 popover
的视觉方面是 Path
添加了 class border
样式:
path = new Path();
path.getStyleClass().add("border");
因此 .css
文件将显示为:
.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, 0.5); /* instead -fx-background-color */
-fx-effect: dropshadow(gaussian, rgba(0,0,0,.2), 10.0, 0.5, 2.0, 2.0);
}