图像按钮javafx

时间:2016-05-27 00:55:17

标签: javafx fxml

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

所以按钮可见的是边框。出于某种原因,当我尝试调整图像大小以适应按钮时自动调整大小。我正在使用场景构建器。 我正在使用FXML。

按钮大小为prefHeight =“38.0”prefWidth =“50.999900000002526”。

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

太多了,你们帮了大家。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是使用padding

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Region.html#setPadding-javafx.geometry.Insets-

  

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);
}

}