这个呢:
.copyable-label {
-fx-background-color: rgba(255,255,255,0.75),
linear-gradient(to bottom,#aaaaaa 0%,#cccccc 100%);
-fx-background-insets: 0,1;
-fx-padding: 7px;
-fx-background-radius: 3px;
-fx-border-radius: 3px;
-fx-effect: innershadow(three-pass-box, rgba(0,0,0,0.75),1,0,1,1);
-fx-font: 14px "Arial";
-fx-text-fill: black;
}
我使用了@Chen-Asraf 提出的样式,但在 JavaFX 中。
主要区别在于您不能将多个效果叠加在一起,但您可以将其应用到背景上。使用逗号分隔的背景颜色值,您的背面为白色,顶部为线性渐变,但插入了 1 个像素,因此如果不应用效果,则可以看到 1px 的白色边框。
黑色内阴影以 1 px 半径和 1x1 偏移应用。这也可以在后台使用三层生成,没有效果:
.copyable-label {
-fx-background-color: rgba(0,0,0,0.75),
rgba(255,255,255,0.75),
linear-gradient(to bottom,#aaaaaa 0%,#cccccc 100%);
-fx-background-insets: 0 1 1 0, 1 0 0 1, 1;
-fx-padding: 7px;
-fx-background-radius: 3px;
-fx-border-radius: 3px;
-fx-font: 14px "Arial";
-fx-text-fill: black;
}
这个场景有一个Label 和一个Textfield,两者风格相同。将文本字段设置为不可编辑,这些控件之间的唯一区别是您只能选择和复制文本字段的文本。
@Override
public void start(Stage primaryStage) {
Label label=new Label("Text");
label.getStyleClass().add("copyable-label");
label.setPrefWidth(100);
TextField textField=new TextField("Text");
textField.setEditable(false);
textField.getStyleClass().add("copyable-label");
textField.setPrefWidth(100);
textField.setMinWidth(100);
textField.setMaxWidth(100);
VBox root = new VBox(20,label,textField, new Button("Ok"));
root.setStyle("-fx-background-color: #ccc;");
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root, 300, 250);
scene.getStylesheets().add(getClass().getResource("root.css").toExternalForm());
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}