2014-12-08 2 views
0

코드에 새 스테이지를 만들고 스테이지가 장식이 필요합니다. 이 경우 새로 만든 스테이지에 드래그 기능이 없어집니다.드래그 기능이 올바르게 작동하지 않습니다! JavaFX VBox 끌기

다음 코드를 생성 했으므로 이제 스테이지를 끌 수 있지만 처리가 올바르지 않으며 스테이지가 마우스를 올바른 방식으로 따르지 않습니다.

내 실수를 말하고 내 오류를 해결할 수 있기를 바랍니다.

도움 주셔서 감사합니다.

예 - CODE : 그들은 절대 위치를 반환으로

import javafx.application.Application; 
import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.geometry.Point2D; 
import javafx.scene.Cursor; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.MenuBar; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 


public class DragStuff extends Application{ 

    VBox mainContainer; 
    Stage mainSt; 

    @Override 
    public void start(Stage mainStage) throws Exception { 
     // TODO Auto-generated method stub 
     mainStage.initStyle(StageStyle.UNDECORATED); 
     mainSt = mainStage; 
     mainContainer = new VBox(); 
     mainContainer.setStyle("-fx-background-color:red"); 


     Label headlineInformation = new Label("Testing"); 
     headlineInformation.getStyleClass().addAll("popup-label-name"); 
     headlineInformation.setMaxWidth(Double.MAX_VALUE); 

     Button closeButton = new Button("X"); 
     closeButton.setVisible(true); 
     closeButton.getStyleClass().addAll("popup-button", 
      "popup-button-color"); 

     HBox headContainer = new HBox(); 
     HBox.setHgrow(headlineInformation, Priority.ALWAYS); 
     headContainer.setPadding(new Insets(5, 5, 5, 5)); 
     headContainer.getChildren().addAll(headlineInformation, closeButton); 



     Pane pane = new Pane(); 
     pane.getChildren().addAll(new Label("Text                      Stuff")); 

     mainContainer.getChildren().addAll(headContainer,pane); 

     Scene sc = new Scene(mainContainer); 
     mainStage.setScene(sc); 
     mainStage.show(); 

     dragHandling(); 

    } 

    public void dragHandling() 
    { 
     final ObjectProperty<Point2D> mouseKoordinates = new SimpleObjectProperty<>(); 
     mainContainer.setOnMousePressed(new EventHandler<MouseEvent>() 
     { 
      @Override 
      public void handle(MouseEvent event) 
      { 
       mouseKoordinates.set(new Point2D(event.getSceneX(), event.getSceneY())); 
       mainContainer.getScene().setCursor(Cursor.HAND); 
      }; 
     }); 

     mainContainer.setOnMouseReleased(new EventHandler<MouseEvent>() 
     { 
      @Override 
      public void handle(final MouseEvent arg0) 
      { 
       mouseKoordinates.set(null); 
       mainContainer.getScene().setCursor(Cursor.DEFAULT); 
      } 
     }); 

     mainContainer.setOnMouseDragged(new EventHandler<MouseEvent>() 
     { 
      @Override 
      public void handle(MouseEvent event) 
      { 
       if (mouseKoordinates.get() != null) 
       { 
        double x = event.getScreenX(); 
        double deltaX = x - mouseKoordinates.get().getX(); 
        double y = event.getScreenY(); 
        double deltaY = y - mouseKoordinates.get().getY(); 
        mainSt.setX(mainSt.getX() + deltaX); 
        mainSt.setY(mainSt.getY() + deltaY); 
        mouseKoordinates.set(new Point2D(x, y)); 
       } 
      } 
     }); 
    } 

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

답변

1

당신은 당신의 코드에서 getScreenX()getScreenY()를 사용하지 않아야합니다. 대신에 getX()getY()을 사용해보세요.

더욱이 나는 왜 mouseKoordinates.set(new Point2D(x, y));을 사용하고 있는지 이해하지 못합니다. 내가 내 일보다 더 잘 작동하여 예를하려고하면

다음 코드

mainContainer.setOnMouseDragged(new EventHandler<MouseEvent>() 
{ 
    @Override 
    public void handle(MouseEvent event) 
    { 
     if (mouseKoordinates.get() != null) 
     { 
      double x = event.getX(); 
      double deltaX = x - mouseKoordinates.get().getX(); 
      double y = event.getY(); 
      double deltaY = y - mouseKoordinates.get().getY(); 
      mainSt.setX(mainSt.getX() + deltaX); 
      mainSt.setY(mainSt.getY() + deltaY); 
     } 
    } 
}); 
+0

안녕하세요 이타치를 사용하여 시도,하지만 깜박임, 한 곳에서 영구적이지 스테이지 경악, 그것은 그들 중 두 사람 사이 깜박입니다. 어떻게 해결할 수 있을까요? –