+1 امتیاز
قبل در برنامه نویسی توسط (70 امتیاز)
ویرایش شده قبل توسط

سلام به همه دوستان . 

من به یه مشکلی خوردم امیدوارم که بتونید مشکلم رو حل کنید.

این سوال من مربوط میشه به javafx  

من قطعه کدی نوشتم که یک فرم FXml  رو برای من باز میکنه حالا من اومدم از دستوری استفاده کردم :

stage.initStyle(StageStyle.UNDECORATED);

وقتی من از این دستور استفاده کردم قسمت تولبار بالای برنامه که شامل بستن پنجره و غیره است را برداشت حالا تا قبل از استفاده از دستور بالا فرم من راحت جابه میشد ولی من از این دستور استفاده کردم تا بتونم خودم تولبار اختصاصی درست کنم ولی حالا این فرم قابلیت جابجایی خودش رو از دست داده. باید چه دستوری بنویسم تا این جابجایی در فرم من پیاده سازی بشود؟

اینم یه عکس تا بهتر مفهوم را برسونم:

 

1 پاسخ

+1 امتیاز
قبل توسط (70 امتیاز)
ویرایش شده قبل توسط

برای جابجایی Stage  باید از دستور زیر استفاده کنیم: این سورس کامل قسمت جا بجایی Stage که برای برنامه خودمه

public class Main extends Application {




    private static class Move {double x, y; }
    Move movedrag = new Move();


     public void start(Stage primaryStage) throws Exception{


         FXMLLoader loader = new FXMLLoader(getClass().getResource("View/Login.fxml"));
         AnchorPane shadowPane = loader.load();
         Stage stage = new Stage();
         Scene scene = new Scene(shadowPane);
         stage.setScene(scene);
         scene.getStylesheets().add(getClass().getResource("css/Style.css").toExternalForm());
         shadowPane.setStyle("-fx-background-color: transparent;");
         scene.setFill(Color.TRANSPARENT);
         stage.initStyle(StageStyle.TRANSPARENT);
         stage.show();



         shadowPane.setOnMousePressed(new EventHandler<MouseEvent>() {
         public void handle(MouseEvent event) {
             movedrag.x = stage.getX() - event.getScreenX();
             movedrag.y = stage.getY() - event.getScreenY();
             shadowPane.setCursor(Cursor.HAND);
          }
          });

         shadowPane.setOnMouseDragged(new EventHandler<MouseEvent>() {
          public void handle(MouseEvent event) {
              stage.setX(event.getScreenX() + movedrag.x);
              stage.setY(event.getScreenY() + movedrag.y);
              shadowPane.setCursor(Cursor.HAND);
          }
     });

     }

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


}

اگر دور Stage  بخواهید حاشیه بدید  باید بعد از دستور :

AnchorPane shadowPane = loader.load();
  DropShadow ds = new DropShadow();
         ds.setSpread(1.5);
         ds.setOffsetY(1.0);
         ds.setOffsetX(1.0);
         ds.setColor(Color.rgb(62, 80, 81));
         shadowPane.setEffect(ds);

 

سوالات مشابه

0 امتیاز
0 پاسخ 355 بازدید
0 امتیاز
0 پاسخ 316 بازدید
+2 امتیاز
1 پاسخ 430 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط Simpath (187 امتیاز)
0 امتیاز
1 پاسخ 1.4هزار بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط java_ (778 امتیاز)
0 امتیاز
2 پاسخ 2.2هزار بازدید
+1 امتیاز
0 پاسخ 624 بازدید
0 امتیاز
0 پاسخ 393 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط javad75 (42 امتیاز)
+1 امتیاز
1 پاسخ 1.3هزار بازدید
...