オーバーレイで画像を表示したいプロジェクトに取り組んでいます。
私のアイデアは、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();
}
}
例を実行すると、ウィンドウサイズを画像サイズの2倍に拡大した場合にのみ、スクロールバーが消えることがわかります。スクロールバーを無効にできることはわかっています。これはサンプルコードで機能する可能性がありますが、この例は大幅に短縮されていることに注意してください。動的なサイズ変更もカットしました。