3

私が抱えている問題をどのように進めるかについてのガイダンスを探しています。JavaFX シーンがあり、その中に 1 つまたは複数の線で互いに接続するいくつかのノード (形状) があります。図形を右クリックすると、コンテキスト メニューが表示されます。右クリックしたばかりのこの特定の図形から 3 本の線 (線 1、線 2、線 3 と呼びます) が出ており、コンテキスト メニューを使用して 1 つを削除したいとします。たとえば、「line2」を選択すると、onAction イベントが発生してその行が削除されます。それはすべてうまくいきます。

問題は、画面上の 3 行のどれが line1 なのか、line2 なのか、line3 なのか (もちろんラベルが付いている場合を除きます) がわからないため、削除するまでどの行を削除しようとしているのかわからないことです。たとえば、私が実際にやりたいことは、マウスをコンテキスト メニューの "line2" の上に置き、シーン内の line2 の色を変更して、それが削除されようとしているものであることを示すことです (ねずみ)。ただし、MenuItem でサポートされている唯一のイベントは、クリックされたときの onAction イベントです。onMouseOver 機能を提供する方法はありますか? そうでない場合、この機能をどのように実装できますか?

ありがとう!

4

2 に答える 2

0

これは、行を識別するためのアプローチで作成したサンプル アプリです。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Tooltip;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class MainTest extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        // TODO Auto-generated method stub
        AnchorPane anchorPane = new AnchorPane();
        Scene scene = new Scene(anchorPane);
        stage.setScene(scene);

        Line linea = new Line(0, 0, 50, 50);
        linea.setFill(Color.BLACK);
        final Tooltip t = new Tooltip("Line 1");
        linea.setOnMouseEntered(new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent event) {
                Line line = (Line) event.getSource();
                line.setStroke(Color.RED);

                t.show((Line) event.getSource(), event.getScreenX(),
                        event.getScreenY());

            }
        });
        linea.setOnMouseExited(new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent event) {
                Line line = (Line) event.getSource();
                line.setStroke(Color.BLACK);
                t.hide();
            }
        });
        anchorPane.getChildren().add(linea);
        stage.show();
    }
}

それが役に立てば幸い!

于 2013-10-10T11:34:25.287 に答える