2017-01-23 3 views
1

をドラッグしながら、私はこのようなシーンがあります。ホバー

FlowPane 
    AnchorPane 
     VBox 
     Label 
      LabeledText 
     HBox 
      ImageView 
      VBox 
       Label 
        LabeledView 
     StackPane 
      HBox 
       ImageView 

FlowPaneが複数のAnchorPaneのノードを持っています。私が必要とするのは、その上に何かを何かの上にドラッグしている間に、AnchorPaneが浮かんでいることです。私がドラッグしてマウスを動かさないときと同じように。 私はプログラム的に使用して、hoverをトリガすることができます

private static PseudoClass HOVER_PSEUDO_CLASS = PseudoClass.getPseudoClass("hover"); 
anchorePane.pseudoClassStateChanged(HOVER_PSEUDO_CLASS, true); 

が、これだけ作品をマウスがAnchorPaneノードを右ドラッグしている場合。マウスがlabelまたはimageの上にドラッグされている場合、マウスは移動しません。 私を助けてもらえますか?

答えて

1

自分でホバー効果をどのように引き起こしているのか本当に分かりませんでしたが、そうしてはいけないと思います。 setOnDragEnteredsetOnDragExitedイベントハンドラによって自動的に処理されるため、予想される動作を指定するだけで済みます。私は彼らがどのように働くかを示す小さな例を作った。

public class JavaFXTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     BorderPane root = new BorderPane(); 

     ImageView avatar = new ImageView("https://www.gravatar.com/avatar/1eb4610d0e524773a8d28f8896dd5f20?s=64&d=identicon&r=PG"); 
     avatar.setOnDragDetected(e -> { 
      Dragboard db = avatar.startDragAndDrop(TransferMode.ANY); 
      ClipboardContent content = new ClipboardContent(); 
      content.putImage(avatar.getImage()); 
      db.setContent(content); 
      e.consume(); 
     }); 
     root.setLeft(avatar); 

     root.setCenter(getAnchorPane()); 
     root.setRight(getAnchorPane()); 

     Scene scene = new Scene(root, 400, 150); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public AnchorPane getAnchorPane() { 
     AnchorPane pane = new AnchorPane(); 
     pane.setOnDragEntered(e -> { 
      pane.setStyle("-fx-border-style: dotted;"); 
     }); 
     pane.setOnDragExited(e -> { 
      pane.setStyle(""); 
     }); 
     AnchorPane.setTopAnchor(pane, 20d); 
     AnchorPane.setLeftAnchor(pane, 100d); 
     ImageView imageView = new ImageView("http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png"); 
     pane.getChildren().add(imageView); 

     return pane; 
    } 

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

は、まず私はドラッグすることができる1枚の画像(私のグラバター)、および2枚の同一のパネルで、ステージを作成する - これはstart方法がない事実のすべてです。

getAnchorPane()メソッドは、パネルを作成し、そのイベントハンドラを設定します。何かがドラッグされると、パネルは境界線を点線に変更します。パネルの上にマウスを置いても、子の上にマウスを置くかは関係ありません。これはStackoverflowのロゴです。

Example

+0

ありがとうございます。それは魅力のように働いた。 – Robert