2017-12-27 38 views
0

JavaFX用NetBeans IDE 8.2を使用しています。私はすでにボタンの位置を変更するためにsetLayoutX/Yを使う必要があることを知っています。私はこれを試しましたが、ボタンには何の効果もありません。ここに私のコードです:JavaFXにボタンを配置する方法

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package javafxapplication2; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

/** 
* 
* @author coolDawg1234 
*/ 
public class JavaFXApplication2 extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     String x = "1"; 
     String y = "0"; 

     Button btn1 = new Button(x); 
     btn1.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       System.out.print(x); 
      } 
     }); 

     Button btn2 = new Button(y); 
     btn2.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       System.out.print(y); 
      } 
     }); 

     StackPane root = new StackPane(); 

     root.getChildren().add(btn1); 
     btn1.setLayoutX(250); 
     btn1.setLayoutY(220); 
     root.getChildren().add(btn2); 
     btn1.setLayoutX(200); 
     btn1.setLayoutY(200); 

     Scene scene = new Scene(root, 1000, 1000); 

     primaryStage.setTitle("WHAT\'s GOOD MY MANS"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Netbeans私のためにこれは0エラーが表示され、ボタンの位置以外はすべて私にはうまく見えます。

私の問題を見つける手助けをしてください。

+0

助けてくれてありがとう、私は 'javafx.scene.layout.StackPane; 'をimport javafx.scene.layout.StackPane;に変更します。 'StackPane'の他の全てのインスタンスを' Pane'に切り替えました –

答えて

4

ボタンのコンテナはStackPaneです。 StackPaneは、Paneの実装であり、デフォルトでは、その子をそのレイアウトの中心にレイアウトします。したがって、シーンがレイアウトを実行する必要があるときはいつでも、layoutChildren()メソッドでは、とlayoutYの値が設定されます(したがって、設定した値を上書きします)。この動作は、サブクラスがPaneのすべてではないにしても、ほとんどのサブクラスで発生します。

子ノードを手動で配置する必要がある場合は、汎用のPaneコンテナを使用する必要があります。サブクラス化を選択して独自のレイアウト戦略/ロジックを提供するか、子ノードの値を直接layoutXlayoutYに設定することができます。

StackPaneで提供されているレイアウト戦略が必要だが、デフォルトの位置と若干異なる位置に配置したい場合は、translateXProperty()translateYProperty()を探している可能性があります。

関連する問題