আমি জানি এটি আপনি যে উত্তর চান তা নয়, তবে প্রস্তাবিত সমাধানগুলি ভাল নয় (এবং আপনার নিজস্ব উপায়টি) is কেন? কারণ তারা আবেদনের অবস্থার উপর নির্ভর করে। জাভাএফএক্সে একটি নিয়ন্ত্রণ, একটি দৃশ্য এবং একটি মঞ্চ একে অপরের উপর নির্ভর করে না। এর অর্থ একটি দৃশ্যে যুক্ত না হয়ে একটি নিয়ন্ত্রণ বেঁচে থাকতে পারে এবং একটি দৃশ্যের সাথে সংযুক্ত না হয়ে একটি দৃশ্য থাকতে পারে। এবং তারপরে, তাত্ক্ষণিক টি 1, নিয়ন্ত্রণ কোনও দৃশ্যের সাথে সংযুক্ত হয়ে যেতে পারে এবং তাত্ক্ষণিক টি 2 এ, সেই দৃশ্যে একটি দৃশ্যের যোগ করা যেতে পারে (এবং তারা কেন একে অপরের পর্যবেক্ষণযোগ্য বৈশিষ্ট্য তা ব্যাখ্যা করে)।
সুতরাং যে পদ্ধতির মাধ্যমে নিয়ামককে রেফারেন্স পেতে এবং কোনও পদ্ধতিতে অনুরোধ জানানো হয়, পর্যায়টি পেরিয়ে যাওয়া আপনার আবেদনে একটি রাজ্য যুক্ত করে। এর অর্থ আপনি পর্যায়ে তৈরি হওয়ার ঠিক পরে, সঠিক মুহূর্তে আপনাকে সেই পদ্ধতিটি শুরু করতে হবে। অন্য কথায়, আপনাকে এখনই একটি আদেশ অনুসরণ করতে হবে: 1- মঞ্চ তৈরি করুন 2- একটি তৈরি পদ্ধতির মাধ্যমে এই তৈরি পর্যায়টি নিয়ামকের কাছে পৌঁছে দিন।
আপনি এই পদ্ধতিতে এই ক্রমটি পরিবর্তন করতে (বা না করা উচিত)। সুতরাং আপনি রাষ্ট্রহীনতা হারিয়েছেন। এবং সফ্টওয়্যার, সাধারণত, রাষ্ট্র খারাপ। আদর্শভাবে, পদ্ধতিগুলির কোনও কল অর্ডার প্রয়োজন হবে না।
তাহলে সঠিক সমাধান কী? দুটি বিকল্প রয়েছে:
1- আপনার পন্থাটি পেতে নিয়ামক শ্রবণ বৈশিষ্ট্যে আপনার পন্থা। আমি মনে করি এটি সঠিক পন্থা। এটার মত:
pane.sceneProperty().addListener((observableScene, oldScene, newScene) -> {
if (oldScene == null && newScene != null) {
newScene.windowProperty().addListener((observableWindow, oldWindow, newWindow) -> {
if (oldWindow == null && newWindow != null) {
((Stage) newWindow).maximizedProperty().addListener((a, b, c) -> {
if (c) {
System.out.println("I am maximized!");
}
});
}
});
}
});
2- আপনি যেখানে তৈরি করবেন সেখানে যা করতে হবে তা করুন Stage
(এবং এটি আপনি চান না):
Stage stage = new Stage();
stage.maximizedProperty().addListener((a, b, c) -> {
if (c) {
System.out.println("I am maximized!");
}
});
stage.setScene(someScene);
...