JavaFX:如何给多个Circle相同大小?

时间:2018-11-05 16:10:05

标签: java css xml javafx fxml

我的问题似乎很简单,但是我还没有找到好的方法。我想在我的FXML中定义几个圆,10个圆的半径应为10px,其他20个圆应为6px之一。我想一次声明尺寸,以便可以轻松更改它。

我没有发现是否/如何在FXML中声明变量,这是最简单的方法。因此,我希望CSS能够对我有所帮助,这会更好:我试图给圆提供两个styleClasses并为CSS中的圆设置大小,但是似乎没有属性可以缩放圆。

<Circle fx:id="c00" centerX="100" centerY="100" styleClass="circle10" /> 

另一个想法是重写Circle类,并将半径设置为所需值。但是我认为这不是干净的代码,因为布局应使用FXML和CSS而不是Java进行。

必须有一种方法来避免在那个地方弄乱Java代码。

在此先感谢您的帮助! 二甲虫

1 个答案:

答案 0 :(得分:2)

在FXML中,如果要定义可以在多个位置使用的单个变量,请使用fx:define。来自Introduction to FXML

  

<fx:define>元素用于创建存在于对象层次结构之外但可能需要在其他地方引用的对象。

     

例如,使用单选按钮时,通常会定义一个ToggleGroup来管理按钮的选择状态。该组不是场景图本身的一部分,因此不应添加到按钮的父级中。定义块可用于创建按钮组,而不会影响文档的整体结构:

<VBox>
    <fx:define>
        <ToggleGroup fx:id="myToggleGroup"/>
    </fx:define>
    <children>
        <RadioButton text="A" toggleGroup="$myToggleGroup"/>
        <RadioButton text="B" toggleGroup="$myToggleGroup"/>
        <RadioButton text="C" toggleGroup="$myToggleGroup"/>
    </children> 
</VBox>
     

在定义块中的元素通常被分配一个ID,该ID可在以后用于引用元素的值。后面的部分将更详细地讨论ID。

下面是定义Circle半径的示例:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.Double?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Circle?>

<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" spacing="10.0" alignment="CENTER">

    <padding>
        <Insets topRightBottomLeft="10.0"/>
    </padding>

    <fx:define>
        <Double fx:id="smallRadius" fx:value="50.0"/>
        <Double fx:id="largeRadius" fx:value="100.0"/>
    </fx:define>

    <Circle radius="$smallRadius"/>
    <Circle radius="$largeRadius"/>
    <Circle radius="$smallRadius"/>
    <Circle radius="$largeRadius"/>

</VBox>