首页 > 编程语言 >JavaFX:实现滚动 + 缩放联动

JavaFX:实现滚动 + 缩放联动

时间:2023-01-08 14:22:06浏览次数:39  
标签:Group 缩放 JavaFX pane 滚动 stage

JavaFX要实现滚动可以使用ScrollPane,要实现缩放可以通过调用setScaleX和setScaleY、setScaleZ,如果需要实现滚动 + 缩放联动,那么需要一点点小技巧,这里记录一下。

1. 实现滚动

实现JavaFX的滚动很简单,只需要将UI组件放在ScollPane中即可,下面是一个实现的例子:

public class Sample01 extends Application {

    @Override
    public void start(Stage stage) {
        ScrollPane root = new ScrollPane();

        StackPane pane = new StackPane();
        pane.setPrefWidth(640);
        pane.setPrefHeight(480);

        Button btn = new Button("米虫2022");
        pane.getChildren().add(btn);

        root.setContent(pane);
        root.setVvalue(0.5);
        root.setHvalue(0.5);

        stage.setTitle("滚动 + 缩放");
        stage.setWidth(320);
        stage.setHeight(240);
        stage.setScene(new Scene(root));
        stage.getIcons().clear();
        stage.getIcons().add(new Image("logo.jpg"));
        stage.show();
    }
}

这里的stage长宽只有320x240,而内容面板的长宽是640x480,是stage的两倍,这样ScollPane就会出现滚动条了,效果如下:

2. 实现缩放

JavaFX缩放可以通过调用UI组件setScaleX和setScaleY、setScaleZ的API来实现,改造一下上面的例子,给按钮添加一个鼠标处理事件,当按住Ctrl单击时缩小,没有按住Ctrl时单击放大:

btn.setOnMouseClicked(event -> {
    if (event.isControlDown()) {
        pane.setScaleX(pane.getScaleX() - 0.1);
        pane.setScaleY(pane.getScaleY() - 0.1);
    } else {
        pane.setScaleX(pane.getScaleX() + 0.1);
        pane.setScaleY(pane.getScaleY() + 0.1);
    }
});

效果如下:

3. 滚动 + 缩放

在上面的例子中,可以看到,缩放时滚动条并不会发生变化,要实现JavaFX的滚动 + 缩放效果,需要给ScrollPane中的UI套一个Group,重新改造一下代码:

root.setContent(new Group(pane));

效果如下:

这样,缩放时,滚动就会跟着变化了。

下面是关于Group的API说明:

A Group node contains an ObservableList of children that are rendered in order whenever this node is rendered.
A Group will take on the collective bounds of its children and is not directly resizable.
Any transform, effect, or state applied to a Group will be applied to all children of that group. Such transforms and effects will NOT be included in this Group's layout bounds, however if transforms and effects are set directly on children of this Group, those will be included in this Group's layout bounds.

标签:Group,缩放,JavaFX,pane,滚动,stage
From: https://www.cnblogs.com/michong2022/p/17034636.html

相关文章

  • JavaFX:构建JavaFX的IoC,实现Bean管理,自由注入Contoller需要的Bean
    习惯了使用Spring的IoC开发JavaEE应用之后,总想着在JavaFX开发中使用IoC管理应用中的单例对象,这里记录一下构建JavaFX.IoC实现Bean管理和依赖注入的过程。1.IoC.需求实际......
  • .PNG读写与图像缩放入门
    小图片: IfranView:   IrfanView是免费软件但不开源。下面的程序读入small.png,用最简单的方法放大,然后写入big.png:/*https://www.nongnu.org/pngpp/在libpng上包......
  • 数据可视化大屏百度地图GPS轨迹位置感知状态开发实战案例解析(百度地图jsAPI,包含缩放控
    系列文章目录1.​​数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)​​2.数据可视化大屏百度地图API开发:停车场分布标注和检索静态版3.......
  • 图像缩放、旋转、翻转、平移
    本文介绍几种常见的图像几何变换方法。1.图像缩放图像缩放就是将源图像中的像素点经过算法映射到目标图像的像素点的过程,即找出目标图像中的像素点Pd(Xd,Yd)对应的源图像......
  • 移动端键盘弹起试页面滚动到底部
    问题:输入键盘弹起时会遮盖住底部的内容解决:增加内容高度,然后页面滚动到底部<InputItem[content]="'评分'"[type]="'money'"[placeholder]="'满分100分'"formControl......
  • CAD参照缩放怎么操作?CAD参照缩放教程
    CAD外部参照指可以将整个图形作为参照图形附着到当前的图形中,当插入的CAD外部参照尺寸不合适时,该如何调整呢?这个问题其实很简单,下面小编来给大家分享一下CAD参照缩放怎么操......
  • javaFX中Label如何设置居中
    Labellabel=newLabel("居中");HBoxhBox=newHBox();hBox.getChildren().addAll(label);hBox.setPrefHeight(35);hBox.setPrefWidth(410);hBox.setLayoutX(125);//hBo......
  • javaFX中Label如何设置居中
    Labellabel=newLabel("居中");HBoxhBox=newHBox();hBox.getChildren().addAll(label);hBox.setPrefHeight(35);hBox.setPrefWidth(410);hBox.setLayoutX(125);//hBo......
  • javaFX中Label如何设置居中
    Labellabel=newLabel("居中");HBoxhBox=newHBox();hBox.getChildren().addAll(label);hBox.setPrefHeight(35);hBox.setPrefWidth(410);hBox.setLayoutX(125);//hBo......
  • 滚动条设置样例
    ::-webkit-scrollbar{display:block;/*滚动条整体样式*/width:5px;/*高宽分别对应横竖滚动条的尺寸*/height:0;}::-webkit-scrollbar-th......