2016-08-22 54 views
1

我似乎無法調整複選框,無論使用寬度/高度,minWidth/minHeight還是maxWidth/maxHeight。改變最小寬度似乎只以實現節點填充JavaFX,如何調整複選框的大小?

package checkboxtest; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class CheckBoxTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     CheckBox checkBoxResize = new CheckBox("Resize"); 
     checkBoxResize.setMinWidth(300); 
     checkBoxResize.setMinHeight(300); 

     CheckBox checkBoxNoResize = new CheckBox("No Resize"); 

     StackPane root = new StackPane(); 
     root.getChildren().add(checkBoxResize); 
     root.getChildren().add(checkBoxNoResize); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello Checkbox!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+1

你用CSS試過了嗎? [可能相關答案](http://stackoverflow.com/questions/12038179/javafx-2-0-how-to-change-the-size-of-the-radio-buttons-circle-with-css) – Spotted

回答

3

的「盒子」和「標記」(即複選標記或蜱)中是由CSS確定的複選框。兩者都被渲染爲帶有填充的區域以確定它們的大小;該標記使用SVG形狀呈現複選標記。所以要改變大小,你需要改變應用於這些的填充。

的默認值,從modena.css,是

.check-box > .box { 
    /* ... */ 
    -fx-padding: 0.166667em 0.166667em 0.25em 0.25em; /* 2 2 3 3 */ 
} 
.check-box > .box > .mark { 
    /* ... */ 
    -fx-padding: 0.416667em 0.416667em 0.5em 0.5em; /* 5 5 6 6 */ 
    -fx-shape: "M-0.25,6.083c0.843-0.758,4.583,4.833,5.75,4.833S14.5-1.5,15.917-0.917c1.292,0.532-8.75,17.083-10.5,17.083C3,16.167-1.083,6.833-0.25,6.083z"; 
} 

因此,要通過12倍增加的大小,可以使用:

.big-check-box > .box { 
    -fx-padding: 2em 2em 3em 3em ; 
} 
.big-check-box > .box > .mark { 
    -fx-padding: 5em 5em 6em 6em; 
} 

以下SSCCE,與上述CSS(第二代碼塊)在一個文件「big-check-box.css」中:

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class BigCheckBox extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     CheckBox checkBox = new CheckBox("Regular"); 
     CheckBox bigCheckBox = new CheckBox("Big"); 
     bigCheckBox.getStyleClass().add("big-check-box"); 
     VBox root = new VBox(5, checkBox, bigCheckBox); 

     root.setPadding(new Insets(20)); 
     Scene scene = new Scene(root); 
     scene.getStylesheets().add("big-check-box.css"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

給出

enter image description here

+0

我喜歡它,但我一直在尋找直接的Java解決方案。我期待這是動態的,並試圖用CSS來控制,這隻會是一種痛苦,IMO。 – Quirk

+0

動態執行此操作的唯一方法是通過'lookup'檢索'box'和'mark'並調用'setStyle':即'checkBox.lookup(「.box」)。setStyle(「fx-padding: ...;「);',和'checkBox.lookup(」。mark「)'類似。或者,我還沒有嘗試過,但可能是'((Region)checkBox.lookup(「.box」))。setPadding(new Insets(24,36,24,36));'等 –