2015-09-26 9 views
7

私はいくつかのコントロールとボタンを備えたペインを持っています。ボタンをクリックすると、コントロールを削除せずに、ProgressIndicatorをペインの中央に表示する必要があります。Javafxのペインの中央にProgressIndicatorを表示するには

ボタンのonAction中にプログレスインジケータをペインに追加すると、そのボタンの下にプログレスインジケータが追加されます。私はそれをペインにオーバーレイしたい。

下記の画像は、私が欲しいものを説明しています。

progress indicator

コードは

package fx; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ProgressIndicator; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application { 

@Override 
public void start(Stage arg0) throws Exception { 
    final VBox bx = new VBox(); 
    bx.setAlignment(Pos.CENTER); 
    TextField userName = new TextField("User Name"); 
    userName.setMaxWidth(200); 
    TextField email = new TextField("Email"); 
    email.setMaxWidth(200); 
    Button submit = new Button("Submit"); 
    submit.setOnAction(new EventHandler<ActionEvent>() { 

     public void handle(ActionEvent event) { 
      ProgressIndicator pi = new ProgressIndicator(); 
      //adding here but it is adding at below of button 
      //how to do here 
      bx.getChildren().add(pi); 
      //Further process 
      } 
    }); 
    bx.getChildren().addAll(userName, email, submit); 
    Scene c = new Scene(bx); 
    arg0.setScene(c); 
    arg0.setMinWidth(500); 
    arg0.setMinHeight(500); 
    arg0.show(); 
    } 

    public static void main(String[] args) { 
    Main h = new Main(); 
    h.launch(args); 
    } 
} 

答えて

12

あなたはVBoxのを使用するのではなく、あなたのルートレイアウトとしてStackPaneを使用する必要があります。 StackPaneを使用すると、ノードを重ねて(zオーダー)スタックすることができます。

ボタンのアクションで、新しいProgressIndicatorを作成してStackPaneに追加することができます。インジケータにすべての使用可能な領域をキャプチャさせたくないため、インジケータの親として別のVBoxを導入しました。 disable既に存在するVBoxを使用して、処理が完了した後にボタンの操作に​​効果を得ることができます.VBoxを再び有効にすることができます。

enter image description here


import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ProgressIndicator; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application { 

    @Override 
    public void start(Stage arg0) throws Exception { 
     StackPane root = new StackPane(); 
     VBox bx = new VBox(); 
     bx.setAlignment(Pos.CENTER); 
     TextField userName = new TextField("User Name"); 
     userName.setMaxWidth(200); 
     TextField email = new TextField("Email"); 
     email.setMaxWidth(200); 
     Button submit = new Button("Submit"); 
     submit.setOnAction(new EventHandler<ActionEvent>() { 

      public void handle(ActionEvent event) { 
       ProgressIndicator pi = new ProgressIndicator(); 
       VBox box = new VBox(pi); 
       box.setAlignment(Pos.CENTER); 
       // Grey Background 
       bx.setDisable(true); 
       root.getChildren().add(box); 
      } 
     }); 
     bx.getChildren().addAll(userName, email, submit); 
     root.getChildren().add(bx); 
     Scene c = new Scene(root); 
     arg0.setScene(c); 
     arg0.setMinWidth(500); 
     arg0.setMinHeight(500); 
     arg0.show(); 
    } 

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

これが正常に動作しますが、オーバーレイは、私は理由1 bx.setDisable(真)私のレイアウトでVBOXを追加する必要がありましたグレーを表示します。私はテキストラベル=新しいテキスト( "読み込んでいます...しばらくお待ちください")を使用して読み込みテキストを追加しました。 label.setBoundsType(TextBoundsType.VISUAL); label.setFill(Color.BLACK); –

関連する問題