Während dieser Stackoverflow-Beitrag hilft, das Drag-Problem zu lösen,
wie man ein nicht verziertes Fenster (Bühne) von JavaFX zieht
Es lässt Windows Snap definitiv nicht funktionieren. Gibt es eine Möglichkeit, wie ich dies verwenden soll, um Window Snap zum Laufen zu bringen?
Lösung des Problems
Dies ist eine JavaFX-App mit einer Klasse, die Sie ausprobieren können. Sie können die Bühne mit dem grünen Kreis ziehen und die App mit dem roten schließen. wann stage.getX==0
ist auf der linken Seite des Bildschirms und die App ändert die Größe auf maxHeight
des Bildschirms, der sich darin befindet Screen.getPrimary().getBounds().getMaxY()
und Screen.getPrimary().getBounds().getMaxX()
durch zwei geteilt wird, um die halbe Breite des Bildschirms zu erhalten. denn die rechte Seite ist ein bisschen knifflig, wenn stage.getX()
plus die aktuelle Breite des Fensters übereinstimmt Screen.getPrimary().getBounds().getMaxY()
bedeutet, dass die rechte Seite des Fensters die rechte Seite des Bildschirms erreicht. Alle anderen Werte der x-Position der Bühne werden auf die Originalgröße zurückgesetzt. und... für den oberen Teil. Wannstage.getY()<=0
und nicht ganz links und ganz rechts auf dem Bildschirm die App im Vollbildmodus aufrufen. Jedes Mal, wenn der grüne Kreis gedrückt wird, prüft der Zuhörer, ob er im Vollbildmodus ist oder nicht. Wenn es im Vollbildmodus ist, wird es auf die Standardgröße zurückgesetzt.
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class App extends Application {
boolean isInRightSide = false;
double offsetX;
double offsetY;
int defaultWidth = 640;
int defaultHeight = 480;
@Override
public void start(Stage stage) {
double screenMaxX = Screen.getPrimary().getBounds().getWidth();
System.out.println(Screen.getPrimary().getBounds());
Circle dragCircle = new Circle(30, new Color(0, 1, 0, 1));
Circle closeCircle = new Circle(30, new Color(1, 0, 0, 1));
HBox hBox = new HBox(dragCircle, closeCircle);
closeCircle.setOnMouseClicked(e -> stage.close());
hBox.setAlignment(Pos.TOP_RIGHT);
dragCircle.setOnMousePressed(e -> {
if (stage.isFullScreen()) {
stage.setFullScreen(false);
}
{
offsetX = e.getSceneX();
offsetY = e.getSceneY();
}
}
);
dragCircle.setOnMouseDragged(e -> {
stage.setX(e.getScreenX() - offsetX);
stage.setY(e.getScreenY() - offsetY);
e.consume();
});
// sanap to left and right
stage.xProperty().addListener(e -> {
if (stage.getX() + defaultWidth > screenMaxX) {
stage.setX(screenMaxX - defaultWidth);
}
if (stage.getX() <= 0) {
stage.setHeight(Screen.getPrimary().getBounds().getMaxY());
stage.setWidth(Screen.getPrimary().getBounds().getMaxX() / 2);
} else if (!isInRightSide) {
stage.setHeight(defaultHeight);
stage.setWidth(defaultWidth);
}
if (stage.getX() + defaultWidth == screenMaxX) {
isInRightSide = true;
stage.setHeight(Screen.getPrimary().getBounds().getMaxY());
stage.setWidth(Screen.getPrimary().getBounds().getMaxX() / 2);
} else {
isInRightSide = false;
}
});
// snap to top = fullscreen
stage.yProperty().addListener(e -> {
if (stage.getY() <= 0 && stage.getX()!= 0 &&!isInRightSide) {
stage.setFullScreen(true);
}
});
stage.initStyle(StageStyle.UNDECORATED);
Scene scene = new Scene(new AnchorPane(hBox), defaultWidth, defaultHeight);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
App starten
App-Snap, wenn die rechte Seite erreicht wird
Keine Kommentare:
Kommentar veröffentlichen