2017-06-17 1 views
1

Id mag diesen Stil programmatisch anwenden:Inline-Stil Unterklasse JavaFX

.rating:disabled > .container:disabled .button:disabled{ 
    -fx-pref-height:15; 
    -fx-background-size: cover; 
    -fx-padding: 0; 
} 

ich das versucht, aber nicht funktioniert:

ratingHeigth.bind(mainBorderPane.prefHeightProperty().divide(0.0355)); 
    vipRating.styleProperty().bind(Bindings.concat(".rating:disabled > .container:disabled .button:disabled{ -fx-pref-height: ", ratingHeigth.asString(), ";}")); 

Antwort

2

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 ; 
} 
+0

Danke mein Freund, ich bin Tage danach zu suchen. – Marckaraujo

+0

Wow, eine neue Sache, die ich heute gelernt habe. +1 und fav. – Mordechai

+0

@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

Verwandte Themen