快速提问,如何在fxml中覆盖整个按钮。
所以按钮可见的是边框。出于某种原因,当我尝试调整图像大小以适应按钮时自动调整大小。我正在使用场景构建器。 我正在使用FXML。
按钮大小为prefHeight =“38.0”prefWidth =“50.999900000002526”。
请记住,我不想看到按钮的背景。我希望它被图像覆盖。
太多了,你们帮了大家。
答案 0 :(得分:2)
您正在寻找的是使用padding
setPadding
public final void setPadding(Insets value);
设置属性填充的值。
物业描述: 围绕区域内容的顶部,右侧,底部和左侧填充。此空间将包含在区域的最小和首选大小的计算中。默认情况下,填充为Insets.EMPTY。应避免将值设置为null。
它没有提到默认值,但您可以通过输入button.getPadding();
我决定自己测试一下,得到的值是
Insets [top=4.0, right=8.0, bottom=4.0, left=8.0]
这就是为什么你遇到的问题没有填满。调整大小会影响按钮,图形是其中的一部分。
接下来,我们必须定义我们的插图以获得所需的效果。
要定义我们的填充,我们需要查看insets
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);
}
}