图像按钮 javafx



快速问题,如何在 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);
}

}

最新更新