Java 使用滚动事件放大和缩小
我试图创建一个包含Java 使用滚动事件放大和缩小,java,javafx-2,Java,Javafx 2,我试图创建一个包含矩形和文本对象的组,以便使用滚动事件进行上下缩放。我很难从卷轴的三角形中获得正确的比例。下面的代码是我目前拥有的代码。任何帮助都将不胜感激 谢谢 import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.input.ScrollEvent; im
矩形
和文本
对象的组,以便使用滚动事件
进行上下缩放。我很难从卷轴的三角形中获得正确的比例。下面的代码是我目前拥有的代码。任何帮助都将不胜感激
谢谢
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();
}
});
}
}
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.input.ScrollEvent;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.scene.text.text;
导入javafx.stage.stage;
//演示如何缩放包含内容的测试窗格。
公共类ScaleTest扩展了应用程序{
组页;
双文本比例=1.0;
公共静态void main(字符串[]args){
发射();
}
@凌驾
public void start(Stage)引发异常{
阶段。设置标题(“比例测试”);
组根=新组();
页面=新组();
矩形r=新矩形(300300);
Text t=新文本(“asodjoijdjasjdoijasjdijasijdiajsidjoiasjiodjaijdoijaijdoijdoijdoijdoijdoijdoijsoidj\njdoasijdoajdoajdoajdoajsoidjoaisjdoijdoisjdojs”);
t、 刚毛填充(颜色:花白色);
t、 setWrappingWidth(280);
t、 setX(10);
t、 赛蒂(20);
page.getChildren().addAll(r,t);
root.getChildren().add(第页);
场景=新场景(根,800600);
此.setSceneEvents(场景);
舞台场景;
stage.show();
}
私有void setSceneEvents(最终场景){
//处理鼠标滚动
scene.setOnScroll(
新的EventHandler(){
@凌驾
公共无效句柄(ScrollEvent事件){
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();
}
});
}
}
| 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();
}
});
}
private void setSceneEvents(最终场景){
//处理鼠标滚动
scene.setOnScroll(
新的EventHandler(){
@凌驾
公共无效句柄(ScrollEvent事件){
双变焦因子=1.05;
double deltaY=event.getDeltaY();
如果(三角洲<0){
zoomFactor=2.0-zoomFactor;
}
System.out.println(zoomFactor);
page.setScaleX(page.getScaleX()*zoomFactor);
page.setScaleY(page.getScaleY()*zoomFactor);
event.consume();
}
});
}