2012-12-31 6 views
18

मैं खिड़की की सामग्री को फिट करने के लिए एक विंडो का आकार बदलना चाहता हूं। स्विंग में pack() विधि है। JavaFX में ऐसा करने के लिए एक समान तरीका है?स्विंग के पैक के बराबर जावाएफएक्स()

मैं जो करने का प्रयास कर रहा हूं वह एक पुष्टिकरण संवाद बनाना है। जब मैं संवाद बनाता हूं, तो यह सामग्री से अधिक व्यापक होता है, इसलिए मैं खुद से पूछ रहा था कि मुझे पैक विधि की तरह कुछ चाहिए। यहाँ enter image description here

और मेरे कोड है::

यहाँ क्या हो रहा है का एक स्क्रीनशॉट है

mainClass.getPrimaryStage().setOnCloseRequest(new EventHandler<WindowEvent>() { 
     @Override 
     public void handle(final WindowEvent e) { 
      e.consume(); 

      final Stage dialog = new Stage(); 
      dialog.setTitle("Confirm Before Exit"); 
      dialog.setResizable(false); 
      dialog.initOwner(mainClass.getPrimaryStage()); 
      dialog.initModality(Modality.APPLICATION_MODAL); 

      FlowPane buttons = new FlowPane(10,10); 
      buttons.setAlignment(Pos.CENTER); 
      Button yes = new Button("Yes"); 
      Button no = new Button("No"); 
      buttons.getChildren().addAll(yes, no); 
      VBox box = new VBox(); 
      box.setAlignment(Pos.CENTER); 
      box.setSpacing(10); 
      box.getChildren().addAll(new Label("Do you really want to exit?"), buttons); 

      yes.setOnAction(new EventHandler<ActionEvent>() { 
       @Override 
       public void handle(ActionEvent t) { 
        Platform.exit(); 
       } 
      }); 
      no.setOnAction(new EventHandler<ActionEvent>() { 
       @Override 
       public void handle(ActionEvent t) { 
        dialog.close(); 
       } 
      }); 

      Scene s = new Scene(box); 
      dialog.setScene(s); 
      dialog.show(); 
     } 
    }); 

मुझे आशा है कि वे जल्द ही JavaFX में JOptionPane की तरह कुछ को लागू! यह ऐसा कुछ है जो मुझे नहीं करना चाहिए, यह बहुत बुनियादी है ...

+0

बेहतर होगा कि तुम पैक मैनुअल जहां यह संभव है, अक्सर निर्माण बेहतर उदाहरण के लिए png का होना चाहिए। –

+0

@ पीटररडर कृपया मेरा कोड ऊपर देखें और मुझे बताएं कि क्या कुछ गलत है। – ceklock

+0

@tecnotron और यह भी ध्यान दें कि आपने यहां बॉक्स का उपयोग किया है। यह बॉक्स की वजह से है। –

उत्तर

16

sizeToScene() का उपयोग करने का प्रयास करें मुझे लगता है कि यह वही है जो आप चाहते हैं। मुझे एक उदाहरण देता हूँ:

JavaFX stage fitted to a button

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class NewFXMain extends Application { 

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

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("Hello World!"); 
     Button btn = new Button(); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       System.out.println("Hello World!"); 
      } 
     }); 

     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 
     primaryStage.setScene(new Scene(root)); 
     primaryStage.sizeToScene(); 
     primaryStage.show(); 
    } 
} 
+0

आकार टोस्सेन() टिप के लिए धन्यवाद। यही वह तरीका है जिसे मैं ढूंढ रहा था। चरण की सामग्री बदलते समय उपयोग करना बहुत अच्छा होता है। – ceklock

संबंधित मुद्दे