2015-09-26 15 views
7

Bazı denetimler ve bir düğme içeren bir Panom var. Düğmeye tıkladığımda, herhangi bir denetimi kaldırmadan bölmenin ortasında ProgressIndicator'ı göstermek istiyorum.ProgressIndicator'ı Javafx'te Bölmenin ortasına nasıl gösterir

Düğme onAction düğmesinde bir ProgressIndicator eklerken, bu düğmenin altında ekler. Panele yerleşmesini istiyorum.

Aşağıdaki resim, ne istediğimi açıklamaktadır.

progress indicator

Kod

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); 
    } 
} 

cevap

12

Bir vbox kullanmak yerine kök düzeni gibi bir StackPane kullanmak gerekir. StackPane, düğümleri birbirinin üzerine yığmanıza izin verir (z-sırası).

Düğmenin eylemi üzerinde yeni bir ProgressIndicator oluşturabilir ve StackPane öğesine ekleyebilirsiniz. Göstergenin ebeveyni olarak başka bir VBox tanıttım, çünkü göstergenin tüm mevcut alanı yakalamasını istemedim. İşlem bittikten sonra greying tuşunun eylemini elde etmek için zaten mevcut olan VBox'ı disable yapabilirsiniz. VBox'ı tekrar etkinleştirebilirsiniz.

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

bu iyi çalışır, ancak bindirme i bir bx.setDisable (doğru) çünkü benim düzeninde vbox eklemek zorunda gri göstermek için; griyi göstermek için yeterli olmayacak, aynı zamanda Text etiketini kullanarak yükleme metnini ekledim = new Text ("Loading ... Please wait"); label.setBoundsType (TextBoundsType.VISUAL); label.setFill (Color.BLACK); –

İlgili konular