Dies ist nicht dokumentierte Verhalten, soweit ich Ich bin mir dessen bewusst (so dass du dich vielleicht nicht darauf verlassen willst), aber du kannst eine "Look-Up-Size" auf ähnliche Weise wie eine "nachgeschlagene Farbe" erstellen (was dokumentiert ist).
In Ihrem externen CSS-Stylesheet, tun
.rating {
disabled-button-size: 15 ;
}
.rating:disabled > .container:disabled .button:disabled{
-fx-pref-height: disabled-button-size ;
-fx-background-size: cover;
-fx-padding: 0;
}
Dann in Java do
vipRating.styleProperty().bind(ratingHeight.asString("disabled-button-size: %f ;"));
Ihr Code funktioniert nicht, weil Inline-Stile einfach die tatsächlichen Stil durch die Zeichenfolge an die angegebene Anwendung Knoten, auf dem Sie setStyle(...)
aufrufen: ein Inline-Stil enthält keine Selektoren.
Die Idee in der obigen Lösung besteht darin, eine "nachgeschlagene Größe" (eine Art CSS-Variable) in der CSS-Datei zu definieren, die die gewünschte Höhe definiert. Verwenden Sie dann setStyle
, um den Wert dieser "nachgeschlagenen Größe" zu ändern. Dieser Wert wird von untergeordneten Knoten geerbt. Es genügt also, ihn mit setStyle
auf einem Container mit der CSS-Klasse rating
zu setzen.
Hier ist ein (einfacher) SSCCE. Bewegen Sie den Schieberegler und die Taste Größe ändern:
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.IntegerBinding;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Slider;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class LookedUpSizeTest extends Application {
@Override
public void start(Stage primaryStage) {
Button button = new Button("Test");
StackPane stack = new StackPane(button);
BorderPane root = new BorderPane(stack);
Slider sizeSlider = new Slider(30, 350, 40);
stack.styleProperty().bind(sizeSlider.valueProperty().asString("button-size: %f ;"));
root.setBottom(sizeSlider);
Scene scene = new Scene(root, 400, 400);
scene.getStylesheets().add("style.css");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
style.css:
.root {
button-size: 20 ;
}
.button {
-fx-pref-height: button-size ;
}
Danke mein Freund, ich bin Tage danach zu suchen. – Marckaraujo
Wow, eine neue Sache, die ich heute gelernt habe. +1 und fav. – Mordechai
@James_D, scheint, dass dieser Trick nicht funktionieren für '-fx-font-size', versuche ich die' .table-column.label { -fx-font-size: label-size; } 'aber funktioniert nicht. Irgendein neuer Trick? – Marckaraujo