2015-09-26 32 views
7

我有一個帶有一些控件和按鈕的窗格。當我點擊按鈕時,我想在不刪除任何控件的情況下在窗格中心顯示ProgressIndicator。如何在Javafx中的窗格中心顯示ProgressIndicator

當我在按鈕的onAction期間將ProgressIndicator添加到窗格時,它將其添加到按鈕下方。我希望它覆蓋在窗格上。

下面的圖片解釋了我想要的。

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

您需要使用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

這工作得很好,但疊加顯示灰色我不得不添加的VBOX在我的佈局,因爲一個bx.setDisable(真);將不足以顯示灰色也我添加加載文本使用文本標籤=新文本(「正在加載...請稍候」); label.setBoundsType(TextBoundsType.VISUAL); label.setFill(Color.BLACK); –

相關問題