2016-06-14 3 views
1

私はちょうど最近JavaFXの学習を始めた初心者です。私は自分のプログラム内で同じ再発的な間違いをしているようです。たとえば、次のコードでは、X軸とY軸を描画し、ペインの幅と高さの半分にバインドします。実行すると、軸は非常に小さく、先端のコーナーに位置しますが、アプリケーションのウィンドウのサイズを変更すると、ウィンドウのサイズが変更されなくなるまで、軸のサイズが徐々に増加します。JavaFX:ペインへのトラブルバインディングのプロパティ

public class Debug extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     Pane pane = new Pane(); 
     GraphFunc test = new GraphFunc(); 
     pane.getChildren().add(test); 

     Scene scene = new Scene(pane, 500, 500); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

class GraphFunc extends Pane { 
    private double xAxisSpan, yAxisSpan; 

    public GraphFunc() { 
     xAxisSpan = 100; 
     yAxisSpan = 100; 
     drawAxes(); 
    } 

    private void drawAxes() { 
     Line xAxis = new Line(0, 50, 100, 50); 
     Line yAxis = new Line(50, 0, 50, 100); 
     xAxis.setStartX(0); 
     xAxis.startYProperty().bind(heightProperty().divide(2)); 
     xAxis.endXProperty().bind(widthProperty()); 
     xAxis.endYProperty().bind(heightProperty().divide(2)); 

     yAxis.startXProperty().bind(widthProperty().divide(2)); 
     yAxis.setStartY(0); 
     yAxis.endXProperty().bind(widthProperty().divide(2)); 
     yAxis.endYProperty().bind(heightProperty()); 

     getChildren().addAll(xAxis, yAxis); 
    } 
} 

ペインがStackPaneに変更されると、これは起こりません。混乱します。また、drawAxes()のコードをstart()に移動してペインに行を追加すると、これも実行されません。説明してください、私はそれを研究して遊んだ後に何が起こっているのか分かりません。

答えて

1

これはペインのために起こっています。ペインは、子供の絶対的な配置が必要な場合に使用するためのものです。

これは、Oracleのドキュメントからです:

それは好みのサイズにリサイズ可能な子供をリサイズを超えてレイアウトを行っていないので、このクラスには、子どもたちの絶対的な位置決めが必要な場合には直接使用することができます。枠がレイアウト中に単独で配置されるので、子を配置するのはアプリケーションの責任です。

Pane pane = new Pane(); 
    GraphFunc test = new GraphFunc(); 
    pane.getChildren().add(test); 

    Scene scene = new Scene(pane, 500, 500); 

あなたがシーンから幅と高さを削除し、代わりに次のようにテストするために、直接の幅と高さを設定した場合:

public void start(Stage primaryStage) { 
 
     GridPane pane = new GridPane(); 
 
     GraphFunc test = new GraphFunc(); 
 
     test.setPrefSize(500, 500); 
 
     pane.getChildren().add(test); 
 

 
     Scene scene = new Scene(pane); 
 
     primaryStage.setScene(scene); 
 
     primaryStage.show(); 
 
    }

あなたがこれを取得します:

drawn image

しかし、あなたはスパンできません。

注:Oracleのドキュメントから

アプリケーションが(中心、左上などに配置)子供が 親内で整列保持する必要がある場合、それは代わりに StackPaneを使用する必要があります。 Oracleのドキュメントからも

ペインは 子どもの境界は、独自の境界の外側に延びている可能性があるので、デフォルトではその内容をクリップしない、のいずれか 子供が負に配置されている場合またはペインのサイズが のサイズよりも小さい場合は、そのサイズよりも小さくなります。

+0

これはもっと感謝します。ありがとう! – woodenwaffle

関連する問題