JavaFX zeigen eine Scheibe auf Maus schweben

stimmen
1

Ich habe eine JavaFXAnwendung , wo ich ein zeigen möchten paneauf mousehoverEreignis auf ein Button,

Der Ausgang ich erwarte ist ähnlich dem Windows - Taskleiste Vorschau Stil, wo auf schweben die TaskBar Icons ein Vorschaufenster wird oben gezeigt. (Wie unten)

Geben

Wie kann ich diesen Effekt mit JavaFX erreichen.

Veröffentlicht am 18/12/2018 um 11:14
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
3

Code sehr roh, sondern bekommt die Kernfunktion von Ihnen gewünschte (natürlich kann es in mehr als einer Weise achived werden, auf Bedürfnisse depening, ich habe gerade die Lösung veröffentlicht, die die schnellste war für mich zu implementieren)

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class StickyNotesApp extends Application {

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

    @Override
    public void start(Stage stage) throws Exception {
        StackPane notedPane = new StackPane();
        notedPane.setPrefSize(20, 20);
        notedPane.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
        notedPane.setStyle("-fx-background-color: purple;");

        StackPane rootPane = new StackPane(notedPane);
        rootPane.setPrefSize(400, 400);
        StackPane.setAlignment(notedPane, Pos.BOTTOM_CENTER);

        stage.setScene(new Scene(rootPane));
        stage.show();

        Stage stickyNotesStage = new Stage();
        stickyNotesStage.initOwner(stage);
        stickyNotesStage.initStyle(StageStyle.UNDECORATED);
        StackPane stickyNotesPane = new StackPane();
        stickyNotesPane.setPrefSize(200, 200);
        stickyNotesPane.setStyle("-fx-background-color: yellow;");
        stickyNotesStage.setScene(new Scene(stickyNotesPane));


        notedPane.hoverProperty().addListener((ChangeListener<Boolean>) (observable, oldValue, newValue) -> {
            if (newValue) {
                stickyNotesStage.show();
            } else {
                stickyNotesStage.hide();
            }
        });
    }
}
Beantwortet am 18/12/2018 um 12:02
quelle vom benutzer

stimmen
2

Wie @Przemek erwähnt, kann es viele Möglichkeiten, um diese Anforderung zu nähern. Neben @Przemek Implementierung, die andere Möglichkeit ist, das Popup-Steuerelement zu verwenden.

Unten ist der modifizierte Code von @Przemek mit Popup-Implementierung.

import javafx.application.Application;
import javafx.geometry.Bounds;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.stage.Popup;
import javafx.stage.Stage;

public class StickyNotesApp extends Application {

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

    @Override
    public void start(Stage stage) throws Exception {
        StackPane notedPane = new StackPane();
        notedPane.setPrefSize(20, 20);
        notedPane.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
        notedPane.setStyle("-fx-background-color: purple;");

        StackPane rootPane = new StackPane(notedPane);
        rootPane.setPrefSize(400, 400);
        StackPane.setAlignment(notedPane, Pos.BOTTOM_CENTER);

        stage.setScene(new Scene(rootPane));
        stage.show();

        StackPane stickyNotesPane = new StackPane();
        stickyNotesPane.setPrefSize(200, 200);
        stickyNotesPane.setStyle("-fx-background-color: yellow;");

        Popup popup = new Popup();
        popup.getContent().add(stickyNotesPane);

        notedPane.hoverProperty().addListener((obs, oldVal, newValue) -> {
            if (newValue) {
                Bounds bnds = notedPane.localToScreen(notedPane.getLayoutBounds());
                double x = bnds.getMinX() - (stickyNotesPane.getWidth() / 2) + (notedPane.getWidth() / 2);
                double y = bnds.getMinY() - stickyNotesPane.getHeight();
                popup.show(notedPane, x, y);
            } else {
                popup.hide();
            }
        });
    }
}
Beantwortet am 18/12/2018 um 22:27
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more