1

私はグーグルで何時間も検索していましたが、それでも正しい答えを見つけることができないので、ここに来て尋ねる最後のチャンスがあります。

私は学年のJAVAFXプロジェクトを作成しています。NetBeansを使用しています。

私が持っているアプリケーションで見ることができるポイントがあります。問題は、大きな地図(背景)が欲しいのですが、自分の視点で移動できる必要があります。たとえば、右に50移動します(x)。

Stage、Scene、StackPaneを使用するアプリケーションがあります。

JavaのDimensionsについて何か聞いたのですが、javafxアプリケーションでは使用できません。似たようなものはありますか?アプリケーションで何を使用できますか?

どうもありがとうございます。

4

1 に答える 1

5

あなたが求めているのは、背景Sceneにマップ(として表されるImage)があり、特定の位置でマップと対話できるようにマップの上にコントロールが階層化されていることです。あなたの質問は少し不明確なので、それがあなたが求めているものであるかどうかは正確にはわかりません。

もしそうなら、これを実装するためのサンプルコードがあります。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

/** Constructs a scene with a pannable Map background. */
public class PannableView extends Application {
  private Image backgroundImage;
  
  @Override public void init() {
    backgroundImage = new Image("https://www.narniaweb.com/wp-content/uploads/2009/08/NarniaMap.jpg");
  }
  
  @Override public void start(Stage stage) {
    stage.setTitle("Drag the mouse to pan the map");
    
    // construct the scene contents over a stacked background.
    StackPane layout = new StackPane();
    layout.getChildren().setAll(
      new ImageView(backgroundImage),
      createKillButton()
    );

    // wrap the scene contents in a pannable scroll pane.
    ScrollPane scroll = createScrollPane(layout);
    
    // show the scene.
    Scene scene = new Scene(scroll);
    stage.setScene(scene);
    stage.show();

    // bind the preferred size of the scroll area to the size of the scene.
    scroll.prefWidthProperty().bind(scene.widthProperty());
    scroll.prefHeightProperty().bind(scene.widthProperty());
    
    // center the scroll contents.
    scroll.setHvalue(scroll.getHmin() + (scroll.getHmax() - scroll.getHmin()) / 2);
    scroll.setVvalue(scroll.getVmin() + (scroll.getVmax() - scroll.getVmin()) / 2);
  }
  
  /** @return a control to place on the scene. */
  private Button createKillButton() {
    final Button killButton = new Button("Kill the evil witch");
    killButton.setStyle("-fx-base: firebrick;");
    killButton.setTranslateX(65);
    killButton.setTranslateY(-130);
    killButton.setOnAction(new EventHandler<ActionEvent>() {
      @Override public void handle(ActionEvent t) {
        killButton.setStyle("-fx-base: forestgreen;");
        killButton.setText("Ding-Dong! The Witch is Dead");
      }
    });
    return killButton;
  }

  /** @return a ScrollPane which scrolls the layout. */
  private ScrollPane createScrollPane(Pane layout) {
    ScrollPane scroll = new ScrollPane();
    scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    scroll.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    scroll.setPannable(true);
    scroll.setPrefSize(800, 600);
    scroll.setContent(layout);
    return scroll;
  }
  
  public static void main(String[] args) { launch(args); }  
}

パン可能

この例では、マウスを使用して(または、タッチコマンドやトラックパッドのスクロールジェスチャを使用します。ただし、タッチスクリーンやトラックパッドをテストする必要はありません)、マップをドラッグします。「邪悪な魔女を殺す」ボタンをクリックしてください。

ソリューションは次のように機能します。

  1. ImageView背景マップを保持するためのを作成します。
  2. StackPane積み重ねられた背景の上にシーンコンテンツを構築しますImageView
  3. ScrollPaneシーンのサイズに合わせてシーンをラップします。
  4. にプロパティを設定して、ScrollPaneパン可能にします。
于 2013-02-25T19:24:32.970 に答える