当前位置: 首页 > 知识库问答 >
问题:

JavaFX 滚动窗格滚动条不显示是否包含节点组已放大

詹弘毅
2023-03-14

我有一组节点。添加的第一个节点是一个< code>ImageView。则该组被设置为可滚动窗格的内容子节点。该组被绑定到缩放变换,以便调整该组的大小。

如果添加了一个事件过滤器到可滚动窗格,以识别是否使用了CTRL和鼠标滚轮。这将创建我需要的放大和缩小操作。

问题是可滚动窗格没有根据放大或缩小组更改条形图。

下面是代码片段

Group group = new Group();

ScrollPane sp = new ScrollPane();
sp.setHbarPolicy(ScrollBarPolicy.ALWAYS);
sp.setVbarPolicy(ScrollBarPolicy.ALWAYS);
sp.setContent(group);

InputStream is = MaApplication.class.getResourceAsStream("test.jpg");
Image img = new Image(is);
ImageView viewer = new ImageView(img);
viewer.setFitWidth(600);
viewer.setPreserveRatio(true);
viewer.setDisable(true);
viewer.setCache(true);

group.getChildren().add(viewer);

DoubleProperty zoomProperty = new SimpleDoubleProperty(1);      

Scale scaleTransformation = new Scale();
scaleTransformation.xProperty().bind(zoomProperty);
scaleTransformation.yProperty().bind(zoomProperty);

group.getTransforms().add(scaleTransformation);

sp.addEventFilter(ScrollEvent.SCROLL, new EventHandler<ScrollEvent>() {
   @Override
   public void handle(ScrollEvent event) {
      if (event.isControlDown() && event.getDeltaY() > 0) {
        zoomProperty.set(zoomProperty.get() * 1.1);         
      } else if (event.isControlDown() &&  event.getDeltaY() < 0) {
        zoomProperty.set(zoomProperty.get() / 1.1);
      }
   }
});

我不想使用StackPane实例,因为它在不同的示例中使用。应该使用<code>组

共有1个答案

魏明亮
2023-03-14

ScrollPane 使用布局绑定属性来确定大小,而不是边界在父母中布局边界不包括转换。布局边界只是应用转换之前由节点的几何图形确定的大小。因此,ScrollPane 仍然认为该大小是未转换内容的大小。

要解决此问题,您可以将转换应用于Group在确定其自身大小时考虑子级的转换)

// group.getTransforms().add(scaleTransformation);
viewer.getTransforms().add(scaleTransformation);

或者将< code >内容包装在另一个< code >组中

sp.setContent(new Group(group));

如果要向中添加多个节点,则应使用第二种方法。

 类似资料:
  • 问题我如何可以嵌入这个应用程序到SPlitPane,在左边将是另一个面板。 不幸的是,代码导致了错误的坐标,

  • 我希望能够向下滚动动态生成的电影列表。我尝试添加滚动窗格。 我在页面的开头有一个导航栏,中间有一个包含所有电影的jpanel。 您可以使用以下代码重新创建此示例: 我想做的是用我的鼠标滚轮向下滚动这个电影列表,而不看任何滚动条。它现在看起来应该和现在一模一样,但我希望能够向下滚动,看到所有的电影。 我不知道为什么它不起作用,这就是为什么我在这里问,希望有人能向我解释我做错了什么。

  • 我总是很难让布局与一起工作。我肯定我错过了什么。基本上,我有一个由并排的两列组成的网页。右边的列包含一个固定宽度为的正方形。左边的列应该是可扩展的。由两列组成的页面内容的最大宽度应为400px。当屏幕宽度在和之间时,左边的列应该缩小,但右边的列应该总是。 问题是左列中有一些文本由一个没有空格的长单词组成。这个词恰好是一个URL,但它可能是任何东西,只要它没有任何空格。它似乎可以防止左列收缩。我尝试

  • 问题内容: 当内容的高度增加时,有什么方法可以自动向下滚动ScrollPane控件?例如,我在屏幕底部(在ScrollPane内部)有一个TitledPane,当我展开它时,我希望ScrollPane向下滚动,以便可以看到TitledPane的全部内容。 问题答案: 您可以结合使用和和来实现该行为 第一个是获取titlePane的坐标,第二个是设置scrollPane的垂直栏位置。请注意,它的范围

  • 主要内容:创建滚动条,滚动事件类经常带有一个可滚动的窗格。 滚动条有四个区域: 拇指 右按钮或向下按钮 左按钮或向上按钮 跟踪 上面的代码生成以下结果。 创建滚动条 以下代码使用其默认构造函数创建滚动条。 和方法定义滚动条表示的最小值和最大值。方法设置滚动的当前值,也设置拇指的位置。 当用户移动缩略图时,滚动条的值会更改。默认情况下,滚动条水平定向。我们可以使用方法设置垂直方向。 我们可以单击水平滚动条的左和右按钮或者向上和向

  • 我正在尝试获取一些关于组件的信息,这些组件按标准包含在中。特别是我对阅读水平的感兴趣。我怎么参考?