Javafx

2015-09-26 12 views
7

में फलक के केंद्र में प्रोग्रेसइंडिकेटर को कैसे दिखाएं मेरे पास कुछ नियंत्रण और बटन वाला एक फलक है। जब मैं बटन पर क्लिक करता हूं, तो मैं किसी भी नियंत्रण को हटाने के बिना फलक के केंद्र में प्रगति इंडिकेटर दिखाना चाहता हूं।Javafx

जब मैं 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 उपयोग करने के लिए की जरूरत है। स्टैकपैन आपको एक दूसरे के शीर्ष पर नोड्स को ढेर करने की अनुमति देता है (जेड-ऑर्डर)।

बटन की कार्रवाई पर आप एक नया प्रगति इंडिकेटर बना सकते हैं और इसे अपने स्टैकपेन में जोड़ सकते हैं। मैंने संकेतक के रूप में एक और वीबॉक्स को माता-पिता के रूप में पेश किया है, क्योंकि मैं नहीं चाहता था कि सूचक सभी उपलब्ध स्थान पर कब्जा कर ले। प्रक्रिया पूरी होने के बाद आप बटन की कार्रवाई पर greying प्रभाव प्राप्त करने के लिए 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

इस ठीक काम करता है, लेकिन उपरिशायी ग्रे मैं अपने लेआउट क्योंकि एक bx.setDisable (सही) में vbox जोड़ने के लिए किया था दिखाने के लिए; भूरे रंग को दिखाने के लिए पर्याप्त नहीं होगा, मैंने टेक्स्ट लेबल = नया टेक्स्ट ("लोड हो रहा है ... कृपया प्रतीक्षा करें") का उपयोग करके लोडिंग टेक्स्ट जोड़ा है; लेबल.सेटबाउंड टाइप (टेक्स्टबाउंड टाइप। VISUAL); लेबल.सेटफिल (रंग। काला); –