2016-06-23 6 views
3

私はJavaFX whit FXMLで作業しています。サイズ変更のプロパティと制約のあるトップメニューを作成したいのですが、GridePane内でSplitMenuButtonsを使用していますが、メニューを追加すると問題があります。それはメニューがアップし、非常に小さなpoutsこの親SplitMenuButtonの同じサイズのメニューjavaFX

https://postimg.org/image/566jrsvpj/

のように見えます

私の考えはSplitMenuButtonのwidthPropertyでリスナーを置くことだったし、その後menu.prefWidthを設定しますが、メニューはsetPrefWidthを持っていませんまたはprefWidthメソッド

だから私はそれを回避し、パディングとラベルを追加するこのコードを作るが、醜いと私はどのようにメニューのテキストのために正しいサイズを取得する方法を知っていないと私はどのようにサイズをcalculete知っていないこのメニュー内のテキストは、私が

https://s31.postimg.org/96o9nxch7/image.png

は、それは非常に醜い得るものであり、それは私が作るための方法を探しています

SplitMenuButton.widthProperty().addListener((e,n,v)->{ 
     Label lal = new Label(">"); 
     Insets inces = new Insets(0,0,0,n.intValue()); 
     lal.setPadding(inces); 
     Menu.setGraphic(lal); 
    }); 

に従うようにランダムこのための私のコードは動作します同じサイズのメニューと結果が同じサイズのメニュー項目私が探していることは、私は手元に得た唯一の事、悪いPICのため申し訳ありませんが、この

https://s32.postimg.org/z6zel4tbp/image.png

のようなものですので、

は私が何を探してイム?ノードの種類を変更しますか4つのトップメニューのために?、CSS(しかし、私はCSSの変更は永久的だと思うが、親のサイズが変わっても再計算しないのですが、わかりません)?

答えて

1

あなたは最初のレベルMenu sおよびMenuItemの上のグラフィックとして必要なテキストとLabelを入れてMenuItemgraphicPropertyを使用することを試みることができます。次にLabelprefWidthPropertySplitMenuButtonwidthPropertyにバインドすることができます。

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      BorderPane root = new BorderPane(); 
      Scene scene = new Scene(root,400,400); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 


      SplitMenuButton splitMenuButton = new SplitMenuButton(); 
      splitMenuButton.setPrefWidth(400); 

      MenuItem menuItem = new MenuItem(); 
      prepareMenuItem(menuItem, "I am a MenuItem", splitMenuButton); 
      Menu menu = new Menu(); 
      prepareMenuItem(menu, "I am a Menu", splitMenuButton); 
      MenuItem subMenuItem = new MenuItem("I am not resized!"); 
      menu.getItems().add(subMenuItem); 

      splitMenuButton.getItems().addAll(menu, menuItem); 

      root.setCenter(splitMenuButton); 

      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void prepareMenuItem(MenuItem menuItem, String text, MenuButton menuButton){ 
     Label label = new Label(); 
     label.prefWidthProperty().bind(menuButton.widthProperty()); 
     label.setText(text); 
     label.setTextAlignment(TextAlignment.RIGHT); 
     menuItem.setGraphic(label); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

しかし、結果はドロップダウンでMenuItem sが(理由は内部パディングの)わずかに広くなりますよう、完璧ではないだろうが、あなたは、CSSスタイルクラスを調整することができますmenu-item絶対に同じサイズにするビット:modena.cssJavafX CSS Reference Guideを確認できます。

汚れた解決策があります:次の写真では、label.prefWidthProperty().bind(menuButton.widthProperty());label.prefWidthProperty().bind(menuButton.widthProperty().subtract(32));に変更しました。

enter image description here

関連する問題