2012-11-03 8 views
13

मुझे एक ऐसा एप्लिकेशन बनाना है जिसमें न्यूनतम और अधिकतम बटन अक्षम हो जाएगा।JavaFX में एक अवांछित विंडो movable/draggable कैसे करें?

मैंने "StageStyle.UNDECORATED" का उपयोग किया है जिसके साथ एप्लिकेशन अब चलने योग्य या खींचने योग्य नहीं होगा, इसलिए मैं अपना आवेदन करने के लिए किसी अन्य विकल्प की तलाश कर रहा हूं।

क्या किसी के पास इसका समाधान है?

+0

ऊपर संपत्ति सब एक साथ शीर्षक पट्टी छुपाता है? आप विंडो को खींचने की योजना कैसे बनाते हैं? – SoulMan

+0

हां नीलगोश, उपरोक्त संपत्ति पूरे शीर्षक पट्टी को छुपाती है। –

उत्तर

20

खिड़की को अवांछित करने के लिए प्राप्त करने के लिए लेकिन अभी भी जंगम/खींचने योग्य आपको अपनी पसंद के किसी भी नोड पर उपयुक्त MouseEvent को संभालना होगा।

उदाहरण:

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class SimpleWindowApplication extends Application { 
    private double xOffset = 0; 
    private double yOffset = 0; 

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

    @Override 
    public void start(final Stage primaryStage) { 
     primaryStage.initStyle(StageStyle.UNDECORATED); 
     BorderPane root = new BorderPane(); 

     root.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       xOffset = event.getSceneX(); 
       yOffset = event.getSceneY(); 
      } 
     }); 
     root.setOnMouseDragged(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       primaryStage.setX(event.getScreenX() - xOffset); 
       primaryStage.setY(event.getScreenY() - yOffset); 
      } 
     }); 

     Scene scene = new Scene(root, 800, 600); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

तहत Oracle की JavaFX डाउनलोड पृष्ठ पर निहित बहुत ही मूल्यवान उदाहरण से अधिक जानें: JavaFX Demos and Samples

+0

हां pmoule, यह मेरी समस्या के लिए सबसे अच्छा समाधान है, और यह वास्तव में मेरे लिए बहुत उपयोगी है। आपके प्रयासों के लिए बहुत बहुत धन्यवाद। –

+0

इस तरह काम किया, आपके शोध समय के लिए बहुत बहुत धन्यवाद ... हमने urs का उपयोग किया है :- डी – TechDog

0

इस वर्ग के मुख्य उद्देश्य असज्जित खिड़की घसीटा जा करने के लिए अनुमति देने के लिए है। यह सुनिश्चित करने के लिए कर्तव्य भी करता है कि टास्कबार पूर्णस्क्रीन के साथ दिखाई देता है, और सुनिश्चित करें कि अवांछित विंडो स्क्रीन से बाहर नहीं खींची गई है। अंत में यह त्रुटि "सीएसएस संसाधन नहीं मिला" में एक बग फिक्स प्रदान करता है। बस ओवरड्राइड स्टार्ट() विधि में मुख्य श्रेणी में कोड को नीचे पेस्ट करें, जब चरण दिखाया गया या बाद में तैयार किया जाए।

WindowStyle.allowDrag(root, stage); 
WindowStyle.stageDimension(stage.getWidth(), stage.getHeight()); 

नोट: उपरोक्त पेस्ट करें जब चरण दिखाया गया या बाद में तैयार किया जा रहा है। पूर्ण स्क्रीन खिड़की उपयोग के लिए:

WindowStyle.fullScreen(Stage stage); 

वापस पिछले उपयोग करने के लिए आकार बदलने के लिए:

WindowStyle.restoreScreen(Stage stage); 

अपने दृश्य के लिए कस्टम स्टाइलशीट जोड़ने के लिए, सीधे शब्दों में पेस्ट कोड के नीचे ओवरराइड शुरू में मुख्य वर्ग में() अपने दृश्य को परिभाषित करने के बाद विधि।

scene.getStylesheets().add(WindowStyle.addStyleSheet(String css)); 

सीएसएस के नाम स्टाइल के लिए प्रयोग की जाने वाली के रूप में हो सकते हैं: main.css या styles/main.css

import javafx.geometry.Rectangle2D; 
import javafx.scene.Parent; 
import javafx.scene.input.MouseEvent; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 

/** 
* @author: BENJAH 
*/ 

public class WindowStyle { 
    private static final Rectangle2D SCREEN_BOUNDS= Screen.getPrimary() 
      .getVisualBounds(); 
    private static double[] pref_WH, offset_XY; 
    private static String styleSheet; 

    private WindowStyle(String css) { 
     styleSheet= getClass().getResource(css).toString(); 
    } 

    protected static void allowDrag(Parent root, Stage stage) { 
     root.setOnMousePressed((MouseEvent p) -> { 
      offset_XY= new double[]{p.getSceneX(), p.getSceneY()}; 
     }); 

     root.setOnMouseDragged((MouseEvent d) -> { 
      //Ensures the stage is not dragged past the taskbar 
      if (d.getScreenY()<(SCREEN_BOUNDS.getMaxY()-20)) 
       stage.setY(d.getScreenY() - offset_XY[1]); 
      stage.setX(d.getScreenX() - offset_XY[0]); 
     }); 

     root.setOnMouseReleased((MouseEvent r)-> { 
      //Ensures the stage is not dragged past top of screen 
      if (stage.getY()<0.0) stage.setY(0.0); 
     }); 
    } 

    //Sets the default stage prefered width and height. 
    protected static void stageDimension(Double width, Double height) { 
     pref_WH= new double[]{width, height}; 
    } 

    protected static void fullScreen(Stage stage) { 
     stage.setX(SCREEN_BOUNDS.getMinX()); 
     stage.setY(SCREEN_BOUNDS.getMinY()); 
     stage.setWidth(SCREEN_BOUNDS.getWidth()); 
     stage.setHeight(SCREEN_BOUNDS.getHeight()); 
    } 

    protected static void restoreScreen(Stage stage) { 
     stage.setX((SCREEN_BOUNDS.getMaxX() - pref_WH[0])/2); 
     stage.setY((SCREEN_BOUNDS.getMaxY() - pref_WH[1])/2); 
     stage.setWidth(pref_WH[0]); 
     stage.setHeight(pref_WH[1]); 
    } 

    protected static String addStyleSheet(String css) { 
     new WindowStyle(css); 
     return styleSheet; 
    } 
} 
संबंधित मुद्दे