图像按钮javafx
快速提问,如何在fxml中使图像覆盖整个按钮 所以按钮的所有可见部分都是边框。由于某种原因,当我尝试调整图像大小以适合按钮时,按钮会自动调整大小。我正在使用场景生成器。 我正在使用FXML 按钮大小为prefHeight=“38.0”prefWidth=“50.9990000002526” 记住,我不想看到按钮的背景。我希望它被一个图像覆盖图像按钮javafx,javafx,fxml,Javafx,Fxml,快速提问,如何在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);
}