图像按钮javafx

图像按钮javafx,javafx,fxml,Javafx,Fxml,快速提问,如何在fxml中使图像覆盖整个按钮 所以按钮的所有可见部分都是边框。由于某种原因,当我尝试调整图像大小以适合按钮时,按钮会自动调整大小。我正在使用场景生成器。 我正在使用FXML 按钮大小为prefHeight=“38.0”prefWidth=“50.9990000002526” 记住,我不想看到按钮的背景。我希望它被一个图像覆盖 谢谢,你们帮了大忙。你们想要的是使用填充 设置填充 设置属性填充的值 物业说明: 区域内容周围的顶部、右侧、底部和左侧填充。该空间将包含在区域最小和首选尺

快速提问,如何在fxml中使图像覆盖整个按钮

所以按钮的所有可见部分都是边框。由于某种原因,当我尝试调整图像大小以适合按钮时,按钮会自动调整大小。我正在使用场景生成器。 我正在使用FXML

按钮大小为prefHeight=“38.0”prefWidth=“50.9990000002526”

记住,我不想看到按钮的背景。我希望它被一个图像覆盖


谢谢,你们帮了大忙。

你们想要的是使用
填充

设置填充 设置属性填充的值

物业说明: 区域内容周围的顶部、右侧、底部和左侧填充。该空间将包含在区域最小和首选尺寸的计算中。默认情况下,填充为Insets.EMPTY。应避免将该值设置为null

它没有提到默认值,但您可以通过键入
button.getPadding()轻松获得该值

我决定自己测试一下,得到的值为

 Insets [top=4.0, right=8.0, bottom=4.0, left=8.0]
这就是为什么你有问题,它没有填补。调整大小会影响按钮,图形是按钮的一部分


接下来,我们将必须定义我们的插入,以获得所需的效果

要定义填充,我们需要查看插图

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也有效

从本质上讲,如果给insets一个-1值,它将切断按钮周围的边框,因此按钮本质上是一幅图像


公共类JavaFXApplication扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
按钮btn=新按钮();
btn.setGraphic(新图像视图(图像));
btn.设置填充(新插入(-1,-1,-1,-1));
btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(btn.getPadding());
}
});
StackPane root=新的StackPane();
root.getChildren().add(btn);
场景=新场景(根,300,250);
setTitle(“按钮图像!”);
初级阶段。场景(场景);
primaryStage.show();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}

}

您应该发布您的代码,以便我们可以看到您尝试了什么,从而引导您找到答案。图像应该是整个按钮,但您应该检查按钮的填充,或者只是将“所有边”设置为0。@Lasagna我认为它太简单了,不需要代码,对不起。我不认为我需要代码,我所拥有的只是一个带有imageview的按钮。当你添加代码时,这个网站上的人们喜欢它,并向所有人显示你“试图”解决问题,而不仅仅是想要答案。这只是为了让你知道,这样你的问题就不会被否决,当你只想学习新东西的时候,这很糟糕。
Insets [top=0.0, right=0.0, bottom=0.0, left=0.0]
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);
}