2016-04-19 36 views
0

は、onmouseclickを使用するだけでポップアップウィンドウを表示する方法があります。もしそうなら、どうすればこのことをやりますか?マップ内の建物をクリックすると、新しいウィンドウを表示させるためにコードに追加する必要があります。これが漠然としていると思われる場合は、さらに説明してみてください。乾杯!JavaFxポップアップウィンドウMouseClickで

package application; 


import java.net.URL; 
import java.util.Collection; 
import java.util.ResourceBundle; 

import javafx.beans.InvalidationListener; 
import javafx.beans.Observable; 
import javafx.beans.property.DoubleProperty; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.Node; 
import javafx.scene.control.ScrollBar; 
import javafx.scene.control.Slider; 
import javafx.scene.image.ImageView; 
import javafx.scene.input.MouseEvent; 
import javafx.stage.Popup; 
import javafx.stage.Stage; 

public class MapController implements Initializable { 
//T&L 
protected static double TandLTOP_X = 154.0; 
protected static double TandLTOP_Y = 283.0; 
protected static double TandLBottom_X = 215.0; 
protected static double TandLBottom_Y = 298.0; 

//bussiness building 
protected static double BuisTOP_X = 313.0; 
protected static double BuisTOP_Y = 238.0; 
protected static double BuisBottom_X = 354.0; 
protected static double BuisBottom_Y = 260.0; 

//It Building 
protected static double ITTOP_X = 374.0; 
protected static double ITTOP_Y = 252.0;  
protected static double ITBottom_X = 387.0; 
protected static double ITBottom_Y = 268.0; 

//Nursing Building 
protected static double NurseTOP_X = 425.0; 
protected static double NurseTOP_Y = 259.0; 
protected static double NurseBottom_X = 452.0; 
protected static double NurseBottom_Y = 278.0; 

//Audiotorium 
protected static double AudTOP_X = 247.0; 
protected static double AudTOP_Y = 211.0; 
protected static double AudBottom_X = 297.0;  
protected static double AudBottom_Y = 254.0; 

//Libary 
protected static double LibTOP_X = 328.0; 
protected static double LibTOP_Y = 278.0; 
protected static double LibBottom_X = 382.0;  
protected static double LibBottom_Y = 291.0; 
    @FXML 
    public ImageView Map; 

    @FXML 
    public Slider zoomSlider; 

    @FXML 
    public ScrollBar scrollPane; 

    DoubleProperty zoomProperty; 

    @Override 
    public void initialize(URL arg0, ResourceBundle arg1) { 

zoomProperty = zoomSlider.valueProperty(); 

     // center the scroll pane 
     scrollPane.setValue((scrollPane.getMax() - scrollPane.getMin())/2); 
     scrollPane.setValue((scrollPane.getMax() - scrollPane.getMin())/2); 

     zoomProperty.addListener(new InvalidationListener() { 
      @Override 
      public void invalidated(Observable observable) { 

       double prevHvalue = scrollPane.getValue(); 
       double prevVvalue = scrollPane.getValue(); 

       Map.setScaleX(zoomProperty.get()); 
       Map.setScaleY(zoomProperty.get()); 

       scrollPane.setValue(prevHvalue); 
       scrollPane.setValue(prevVvalue); 
      } 
     }); 



    } 
    private boolean isInTandL(double x, double y) { 
     return x > TandLTOP_X && x < TandLBottom_X && 
       y > TandLTOP_Y && y < TandLBottom_Y; 
    } 

private boolean isInBuisness(double x, double y) { 
    return x > BuisTOP_X && x < BuisBottom_X && 
      y > BuisTOP_Y && y < BuisBottom_Y; 
} 

private boolean isIT(double x, double y) { 
    return x > ITTOP_X && x < ITBottom_X && 
      y > ITTOP_Y && y < ITBottom_Y; 
} 

private boolean isInNursing(double x, double y) { 
    return x > NurseTOP_X && x < NurseBottom_X && 
      y > NurseTOP_Y && y < NurseBottom_Y; 
}  
private boolean isInAudi(double x, double y) { 
    return x > AudTOP_X && x < AudBottom_X && 
      y > AudTOP_Y && y < AudBottom_Y; 
} 
private boolean isInLibary(double x, double y) { 
    return x > LibTOP_X && x < LibBottom_X && 
      y > LibTOP_Y && y < LibBottom_Y; 
} 
    public void HoverMap(MouseEvent e) { 
     double x = e.getX(); 
     double y = e.getY(); 
     System.out.println(x +"," + y); 
     if (isInTandL(x, y)) { 
      System.out.println("In the Tourism and Leisure Building"); 
     } 
     if (isInBuisness(x, y)) { 
      System.out.println("In the Business Building"); 
     } 
     if (isIT(x, y)) { 
      System.out.println("In the It Building"); 
     } 
     if (isInNursing(x, y)) { 
      System.out.println("In the Nursing Building"); 
     } 
     if (isInAudi(x, y)) { 
      System.out.println("In the Auditorium Building"); 
     } 
     if (isInLibary(x, y)) { 
      System.out.println("In the Libary Building"); 
     } 


    }} 


package application; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Popup; 
import javafx.stage.Stage; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 


public class Main extends Application { 

public static Stage stage; 

public static Scene SlideShow; 

public static Scene map; 

public static Scene building; 



    @Override 
    public void start(Stage primaryStage) { 
     try { 
      stage = primaryStage; 

      //load scene building 
      Parent root1 = FXMLLoader.load(getClass().getResource("map.fxml")); 
      map = new Scene(root1, 700, 500); 
      root1.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

      Parent root2 = FXMLLoader.load(getClass().getResource("building.fxml")); 
      building = new Scene(root2, 600, 600); 
      root2.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

      Parent root3 = FXMLLoader.load(getClass().getResource("Slideshow.fxml")); 
      SlideShow = new Scene(root3, 600, 600); 
      root3.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

      primaryStage.setTitle("Popup Example"); 
      final Popup popup = new Popup(); popup.setX(300); popup.setY(200); 

      setMap(); 
      primaryStage.centerOnScreen(); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    public static void setMap() { 
     stage.setScene(map); 
    } 
    public static void setBuilding() { 
     stage.setScene(building); 
    } 
    public static void setSlideShow() { 
     stage.setScene(SlideShow); 
    } 

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

ゴー(http://stackoverflow.com/help/mcve)。 – jewelsea

答えて

0

これにはいくつかの回答があります。ユーザーがメインウィンドウをクリックすると、新しい子ステージを作成する1つの例を示します。おそらくあなたの目的に合わせて調整が必要になるかもしれませんが、タスクの詳細な洞察を得るのに役立つ方向性のある例を提供するかもしれません。

このサンプルでは、​​プレーンStagesではなくPopupsPopupWindows使用しますが、必要に応じて、あなたが望むウィンドウタイプを使用するための実装を調整することができます。

下の画像例では、メインウィンドウの背景を3回クリックして別の場所に3つの別々のポップアップウィンドウを表示しています。問題を複製するためにコピーして貼り付けることができます

[最小限の実行可能コード]について

popups

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class WindowDisplay extends Application { 
    private Stage primaryStage; 

    @Override 
    public void start(Stage stage) throws Exception { 
     primaryStage = stage; 
     Pane layout = new Pane(); 
     layout.setPrefSize(100, 100); 
     layout.setOnMouseClicked(this::showNewWindow); 
     stage.setScene(new Scene(layout)); 
     stage.show(); 
    } 

    private void showNewWindow(MouseEvent event) { 
     Stage stage = new Stage(StageStyle.UNDECORATED); 
     stage.initOwner(primaryStage); 

     stage.setX(event.getScreenX()); 
     stage.setY(event.getScreenY()); 

     Pane layout = new Pane(); 
     layout.setStyle("-fx-background-color: paleturquoise;"); 
     layout.setPrefSize(40, 40); 
     layout.setOnMouseClicked(e -> stage.close()); 
     stage.setScene(new Scene(layout)); 

     stage.show(); 
    } 

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

本当に助けてくれたおかげで本当に助けになりました。どこへ行くのが良いかわかりました。本当に始める方法が分かりませんでした。ありがとうございました :) – aero123

関連する問題