Javafx:填充线

Javafx:填充线,java,javafx,padding,Java,Javafx,Padding,我想在javafx.scene.layout.VBox中对类javafx.scene.shape.Line使用填充。 FXML(包含在另一个中): 然而,没有任何帮助。感谢您的帮助和阅读。假设您要查找的内容类似于水平规则,我建议为此使用区域,并使用CSS设置样式 使用行的问题在于,您将使行处于管理状态(这是默认设置),或者不处于管理状态。如果它是受管理的,则包含它的布局窗格将根据布局规则对其进行定位,因此您将无法指定一个startX,例如。如果未对其进行管理,则需要计算其x和y坐标;因此,例如在

我想在
javafx.scene.layout.VBox
中对类
javafx.scene.shape.Line
使用填充。 FXML(包含在另一个中):


然而,没有任何帮助。感谢您的帮助和阅读。

假设您要查找的内容类似于水平规则,我建议为此使用
区域,并使用CSS设置样式

使用
的问题在于,您将使行
处于管理状态
(这是默认设置),或者不处于管理状态。如果它是受管理的,则包含它的布局窗格将根据布局规则对其进行定位,因此您将无法指定一个
startX
,例如。如果未对其进行管理,则需要计算其
x
y
坐标;因此,例如在
VBox
中,需要手动将其相对于
VBox
的其他子节点进行定位。在这两种情况下,您还需要根据容器的宽度计算
endX
,容器的宽度可能随时发生变化(例如,如果用户调整窗口大小)

使用区域,您只需执行以下操作


然后在外部CSS文件中应用适当的样式,例如:

.hr{
-fx背景色:石板灰;
-外汇背景插图:2 5;
-外汇储备:3020;
}
这是通过使用背景色(
slategrey
,但您当然可以选择任何您喜欢的颜色)来绘制规则,但使用插入在左侧和右侧保留5个像素未填充,在顶部和底部保留2个像素未填充。填充确保区域顶部有三个像素(2个未填充,1个已填充),底部有2个像素(未填充)。因此,最终得到一个一像素高的填充区域(看起来像一条水平线),将整个宽度延伸到每端不到5个像素。你可以尝试不同的插入和填充,以获得不同的效果;e、 g.
-fx背景插图:0 5 0 5
1 0 0 0
的填充将删除顶部和底部周围的空间。在所有边上使用5的插图,但填充
9 0 5 0
将产生4倍宽的线条,等等。您也可以使用渐变填充

下面是一个完整的FXML文件(
HRWithRegion.FXML
)来测试这一点:


还有一个JavaFX应用程序类:只需将上面的FXML文件与这里的源代码放在同一个文件夹中,将CSS文件放在同一个文件夹中,即
hr.CSS

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class HRTest extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("HRWithRegion.fxml"));
        Scene scene = new Scene(root);
        scene.getStylesheets().add("hr.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
以下是调整窗口大小后的结果:


我不确定“填充”是不是你在这里真正的意思。为
区域
(一个
不是
区域
)定义,它是“区域内容周围”的空间量。行没有内容(没有子节点等)。那么,如果将填充设置为某个值,您实际希望看到什么呢?我需要这样的内容:
[空间到边框]\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。所以这条线不接触边界。我已经编辑了我的问题,有一个错误。所以你在寻找类似HTML的东西?
@FXML MyLine spacerLine;
...
line.setStartX(5);
line.setEndX(scene.getWidth() - 5);
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class HRTest extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("HRWithRegion.fxml"));
        Scene scene = new Scene(root);
        scene.getStylesheets().add("hr.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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