Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 窗格未按其转换的维度调整大小_Java_Resize_Javafx 2_Bounds - Fatal编程技术网

Java 窗格未按其转换的维度调整大小

Java 窗格未按其转换的维度调整大小,java,resize,javafx-2,bounds,Java,Resize,Javafx 2,Bounds,我正在做一个项目,我想用叠加显示图像 我的想法是创建一个AncorPane,在它的背景中放置一个ImageView,然后在上面放置几个形状。这确实有效 因为图像非常大,所以需要根据可用空间缩小它们。不用说,我们希望缩小所有覆盖形状,使它们相对于图像保持在同一位置。通过对AncorPane应用比例变换,这在视觉上也起作用,但我的问题来了 AncorPane从它的孩子那里得到它的尺寸。但即使缩小了尺寸,AncorPane仍保持在未转换图像的大小。这会产生大量空白。 我假设布局边界和不可调整大小的节点

我正在做一个项目,我想用叠加显示图像

我的想法是创建一个AncorPane,在它的背景中放置一个ImageView,然后在上面放置几个形状。这确实有效

因为图像非常大,所以需要根据可用空间缩小它们。不用说,我们希望缩小所有覆盖形状,使它们相对于图像保持在同一位置。通过对AncorPane应用比例变换,这在视觉上也起作用,但我的问题来了

AncorPane从它的孩子那里得到它的尺寸。但即使缩小了尺寸,AncorPane仍保持在未转换图像的大小。这会产生大量空白。 我假设布局边界和不可调整大小的节点的父节点中的边界之间存在差异是一个问题

有没有人对设置AncorPane的实际大小有什么建议,或者用另一种方法来消除这些不需要的空格

例如:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;


public class test extends Application
{
    @Override
    public void start(final Stage stage) throws Exception
    {
        final ScrollPane scroll = new ScrollPane();
        final Scene scene = SceneBuilder.create().root(scroll).build();
        final VBox box = new VBox();

        final AnchorPane anchorPane = new AnchorPane();
        final ImageView imageView = new ImageView();
        final Shape overlayRectangle = new Rectangle(100, 100, 100, 100);

        scroll.setContent(box);
        box.getChildren().add(anchorPane);
        anchorPane.getChildren().addAll(imageView, overlayRectangle);
        overlayRectangle.toFront();

        imageView.setImage(new Image("http://cdn.sstatic.net/stackoverflow/img/sprites.png"));

        final Scale scale = new Scale(0.5, 0.5);
        anchorPane.getTransforms().add(scale);

        stage.setScene(scene);
        stage.show();
    }

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

运行该示例时,您可以看到,只有将窗口大小扩展到图像大小的两倍时,滚动条才会消失。我知道我可以禁用滚动条。这可能在示例代码中起作用,但请记住,此示例在很大程度上被缩短了。我甚至停止了动态调整大小。

问题在于您的

  final Scale scale = new Scale(0.5, 0.5);
  anchorPane.getTransforms().add(scale);
删除比例,因为它已经是
sizeToScene
,但您正在重新定义它。 它能解决你的问题吗

还可以改变
scale()
方法的参数来增加或减少(某种缩放效果)空白问题

或将其更改为:

 final Scale scale = new Scale(1,1);
 anchorPane.getTransforms().add(scale);

如果有人发现这一点,我会引用一句话来回答我自己的问题

滚动窗格布局计算基于layoutBounds而不是boundsInParent 滚动节点的(视觉边界)。如果应用程序希望滚动基于节点的视觉边界(对于缩放内容等),则需要将滚动节点包装在一个组中


你是指与
sizeToScene()
方法相关的东西吗?试试看是的,我想在AnchorPane函数上执行类似于
sizeToScene()
的操作。但窗格会自动执行此操作。显然,它们会调整到布局边界,而不是子对象的实际可见边界。这就是我想要改变的。你能帮我吗。发布一个不会解决问题的“否”。如果未缩放任何内容(在移除缩放时发生),则布局和实际可见边界相等。那么问题就不会发生了。但缩小图像+覆盖是我这么做的主要原因。您可以删除
sizeToScene()
,因为它实际上不做任何可见的事情。@l2p哦!你的意思是你必须缩放到(0.5,0.5)并且空格不应该出现?@l2p尝试使用stage.setWidth(215);舞台设置高度(100);和图像视图的.setFitWidth(100)。设置保存比率(真)。设置平滑(真)。setCache(true);不幸的是,这没有帮助。如果我使用
setFitWidth()
设置ImageView的尺寸,布局边界将更改为正确的值,但覆盖也会出现同样的问题。是的,我可以用它各自的方法设置矩形的尺寸,但我想支持形状作为覆盖,通常不可调整大小。