2016-05-27 14 views
1

簡単な質問、fxmlのボタン全体をカバーするにはどうすればいいですか?画像ボタンjavafx

ボタンが表示されているのはすべて境界です。何らかの理由で、ボタンのサイズに合わせて画像のサイズを変更しようとすると、自動的にサイズが変更されます。シーンビルダーを使用していました。 私はFXMLを使用しています。

ボタンのサイズはprefHeight = "38.0" prefWidth = "50.999900000002526"です。

私はボタンの背景を見たくないことを覚えておいてください。私はそれをイメージで覆いたい。

多くの場合、皆さんは大きな助けになりました。あなたが探しているものを

+0

あなたはすべきですあなたの答えをあなたに導くために、あなたが試みたことを見ることができるようにあなたのコードを投稿してください。画像はボタン全体にする必要がありますが、ボタンのパディングをチェックするか、すべての面を0に設定してください。 – XaolingBao

+0

@Lasagna私はそれがとてもシンプルだと思っていました。私は私が持っているすべてのコードがイメージビューのボタンである必要があるとは思わない。 –

+0

このサイトの人々は、コードを追加するときに好きなだけでなく、答えを求めているのではなく、問題を「試そうとしました」ことを誰にも見せてくれます。これはちょうど新しいことを学びたいときにあなたの質問が下落しないようにあなたに知らせることです。 – XaolingBao

答えて

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に設定するのは避けてください。

私はこの自分自身をテストすることを決めた、となぜある

Insets [top=4.0, right=8.0, bottom=4.0, left=8.0] 

の価値を持ってそれがデフォルトに言及していないが、あなたはbutton.getPadding();

を入力して、これを簡単に取得することができますそれでいっぱいになっていない問題があります。サイズ変更はボタンに影響し、グラフィックはその一部です。


次に、目的の効果を得るためにインセットを定義する必要があります。私たちのパディングを定義するには

、我々はそのために使用することができますEmptyの静的フィールドがあるインセット

https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Insets.html

を見てする必要があります。

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

}