快速问题,如何在 fxml 中让图像覆盖整个按钮。
因此,按钮的所有可见内容都是边框。出于某种原因,当我尝试调整图像大小以适应按钮自动调整大小时。我正在使用场景构建器。 我正在使用FXML。
按钮大小为 prefHeight="38.0" prefWidth="50.999900000002526"。
请记住,我不想看到按钮的背景。我希望它被图像覆盖。
非常感谢,你们帮了大忙。
您正在寻找的是使用padding
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Region.html#setPadding-javafx.geometry.Insets-
设置填充
public final void setPadding(Insets value);
设置属性填充的值。
物业描述: 区域内容周围的顶部、右侧、底部和左侧填充。此空间将包含在计算区域的最小和首选大小时。默认情况下,填充为 Inset.EMPTY。应避免将值设置为 null。
它没有提到默认值,但您可以通过键入button.getPadding();
轻松获得
我决定自己测试一下,并得到了一个值
Insets [top=4.0, right=8.0, bottom=4.0, left=8.0]
这就是为什么您遇到它没有填满的问题。 调整大小会影响按钮,图形是按钮的一部分。
接下来,我们必须定义插图以获得所需的效果。
要定义我们的填充,我们需要查看插图
https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Insets.html
有一个静态字段用于Empty
所以让我们使用它。
Button btn = new Button();
btn.setGraphic(new ImageView("image"));
btn.setPadding(Insets.EMPTY);
将产生所需的效果,并产生
Insets [top=0.0, right=0.0, bottom=0.0, left=0.0]
然而。。。 仍然有一个边界,可能只有在聚焦时才存在......
如果您想摆脱边框,请阅读以下内容。
我决定测试负值是否有效,实际上 -1 会起作用。
本质上,如果你给插图一个-1的值,它将切断按钮周围的边框,所以按钮本质上是一个图像
public class JavaFXApplication extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setGraphic(new ImageView(image));
btn.setPadding(new Insets(-1,-1,-1,-1));
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println(btn.getPadding());
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Button Image!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}