2012-12-05 2 views
3

ScrollEvent을 사용하여 RectangleText 개체를 확장 및 축소하는 그룹을 만들려고합니다. 스크롤의 델타에서 사용할 올바른 축척을 얻는 데 문제가 있습니다. 다음 코드는 제가 지금 가지고있는 코드입니다. 어떤 도움을 주시면 감사하겠습니다.스크롤 이벤트를 사용하여 확대/축소

감사

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.input.ScrollEvent; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

// demonstrates scaling a test pane with content in it. 
public class ScaleTest extends Application { 
    Group page; 
    double textScale =1.0; 
    public static void main(String[] args) { 
     launch(); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     stage.setTitle("scale test"); 
     Group root = new Group(); 
     page= new Group(); 
     Rectangle r = new Rectangle(300,300); 
     Text t = new Text("asodjoijdjiasjdoijaisjdijasijdiajsidjoiasjiodjiajosijdiojaisjdoijaoisjdiojaoisjdjaoisjdiojsoidj\njdoasijdoajsoidjoaisjoidjaoisjdiojs"); 
     t.setFill(Color.FLORALWHITE); 
     t.setWrappingWidth(280); 
     t.setX(10); 
     t.setY(20); 
     page.getChildren().addAll(r,t); 
     root.getChildren().add(page); 
     Scene scene = new Scene(root,800,600); 
     this.setSceneEvents(scene); 
     stage.setScene(scene); 
     stage.show(); 
    } 
    private void setSceneEvents(final Scene scene) { 
     //handles mouse scrolling 
     scene.setOnScroll(
       new EventHandler<ScrollEvent>() { 
        @Override 
        public void handle(ScrollEvent event) { 
         double xscale = page.getScaleX() * event.getDeltaY()/35; 
         double yscale= page.getScaleY() * event.getDeltaY()/35; 
         System.out.println("xscale: "+ xscale); 
         System.out.println("yscale: "+ yscale); 
         //page.setScaleX(page.getScaleX() * event.getDeltaY()/35); 
         // page.setScaleY(page.getScaleY() * event.getDeltaY()/35); 
         event.consume(); 
        } 
       }); 

    } 
} 

답변

8

| deltaY에 | 모든 스크롤 이벤트가 동일합니다. 또한 deltaY는 아래로 스크롤 할 때 음수이고 배율은 항상 1.0으로 표준화됩니다. 그래서 나는 스케일링을 결정하는 "줌 팩터"를 사용할 것을 제안합니다. 다음과 같이 시도해보세요.

private void setSceneEvents(final Scene scene) { 
    //handles mouse scrolling 
    scene.setOnScroll(
      new EventHandler<ScrollEvent>() { 
       @Override 
       public void handle(ScrollEvent event) { 
       double zoomFactor = 1.05; 
       double deltaY = event.getDeltaY(); 
       if (deltaY < 0){ 
        zoomFactor = 2.0 - zoomFactor; 
       } 
       System.out.println(zoomFactor); 
       page.setScaleX(page.getScaleX() * zoomFactor); 
       page.setScaleY(page.getScaleY() * zoomFactor); 
       event.consume(); 
       } 
      }); 

    } 
관련 문제