প্রস্তাবিত পদ্ধতির
এই উত্তরটি এফএক্সএমএল নিয়ন্ত্রকদের কাছে পরামিতিগুলি পাস করার জন্য বিভিন্ন প্রক্রিয়া গণনা করে।
ছোট অ্যাপ্লিকেশনগুলির জন্য আমি কলার থেকে নিয়ামকের কাছে সরাসরি পরামিতিগুলি পাস করার সুপারিশ করি - এটি সহজ, সোজা এবং কোনও অতিরিক্ত ফ্রেমওয়ার্কের প্রয়োজন নেই।
বৃহত্তর, আরও জটিল অ্যাপ্লিকেশনগুলির জন্য, আপনি যদি আপনার অ্যাপ্লিকেশনটির মধ্যে নির্ভরতা ইনজেকশন বা ইভেন্ট বাস প্রক্রিয়াটি ব্যবহার করতে চান তবে তা তদন্তযোগ্য হবে worth
কলার থেকে সরাসরি নিয়ন্ত্রকের কাছে প্যারামিটারগুলি পাস করা
এফএক্সএমএল লোডার উদাহরণ থেকে নিয়ামকটি পুনরুদ্ধার করে এবং প্রয়োজনীয় ডেটা মানগুলির সাহায্যে এটি আরম্ভ করার জন্য নিয়ামককে একটি পদ্ধতি কল করে কাস্টম ডেটা একটি এফএক্সএমএল নিয়ামককে দিন Pass
নিম্নলিখিত কোডের মতো কিছু:
public Stage showCustomerDialog(Customer customer) {
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"customerDialog.fxml"
)
);
Stage stage = new Stage(StageStyle.DECORATED);
stage.setScene(
new Scene(
(Pane) loader.load()
)
);
CustomerDialogController controller =
loader.<CustomerDialogController>getController();
controller.initData(customer);
stage.show();
return stage;
}
...
class CustomerDialogController {
@FXML private Label customerName;
void initialize() {}
void initData(Customer customer) {
customerName.setText(customer.getName());
}
}
নমুনা কোড যেমন দেখানো হয়েছে তেমন একটি নতুন এফএক্সএমএলএলডার নির্মিত হয়েছে new FXMLLoader(location)
। অবস্থানটি একটি ইউআরএল এবং আপনি এফএক্সএমএল উত্স থেকে এই জাতীয় URL তৈরি করতে পারেন:
new FXMLLoader(getClass().getResource("sample.fxml"));
FXMLLoader এ কোনও স্ট্যাটিক লোড ফাংশনটি ব্যবহার না করার বিষয়ে সতর্কতা অবলম্বন করুন বা আপনি নিজের লোডার উদাহরণ থেকে আপনার নিয়ামক পেতে সক্ষম হবেন না।
এফএক্সএমএমএলএলডার দৃষ্টান্তগুলি ডোমেন অবজেক্ট সম্পর্কে নিজেরাই কখনও জানে না। আপনি সরাসরি অ্যাপ্লিকেশন নির্দিষ্ট ডোমেন অবজেক্টগুলিকে FXMLLoader কনস্ট্রাক্টরে পাস করবেন না, পরিবর্তে আপনি:
- নির্দিষ্ট জায়গায় fxML মার্কআপের উপর ভিত্তি করে একটি FXMLLoader তৈরি করুন ML
- FXMLLoader উদাহরণ থেকে একটি নিয়ামক পান।
- ডোমেন অবজেক্টের রেফারেন্স সহ নিয়ামক সরবরাহ করতে পুনরুদ্ধারকৃত নিয়ন্ত্রকের উপর পদ্ধতিগুলি আহ্বান করুন।
এই ব্লগটি (অন্য লেখকের দ্বারা) একটি বিকল্প, তবে অনুরূপ উদাহরণ সরবরাহ করে ।
FXMLLoader এ একটি নিয়ামক সেট করা হচ্ছে
CustomerDialogController dialogController =
new CustomerDialogController(param1, param2);
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"customerDialog.fxml"
)
);
loader.setController(dialogController);
Pane mainPane = (Pane) loader.load();
আপনি কোডারে একটি নতুন নিয়ামক তৈরি করতে পারেন, আপনার কলারের কাছ থেকে আপনি যে কোনও প্যারামিটারগুলি নিয়ন্ত্রণকারী কনস্ট্রাক্টরে যেতে চান into একবার আপনি একটি নিয়ামক তৈরি করে ফেললে, আপনি উদাহরণ পদ্ধতিটি শুরু করার আগে আপনি এটিকে FXMLLoader এ ইনস্টল করতে পারেন ।load()
কোনও লোডারে একটি কন্ট্রোলার সেট করতে (জাভাএফএক্স 2.x এ) আপনি fx:controller
আপনার এফএক্সএমএল ফাইলটিতে একটি বৈশিষ্ট্যও সংজ্ঞায়িত করতে পারবেন না ।
fx:controller
এফএক্সএমএলে সংজ্ঞাটির সীমাবদ্ধতার কারণে , আমি ব্যক্তিগতভাবে এফএক্সএমএলএলএডার থেকে কন্ট্রোলারকে এফএক্সএমএলএলএডারে সেট করার চেয়ে কন্ট্রোলার পেতে পছন্দ করি।
বাহ্যিক স্ট্যাটিক পদ্ধতি থেকে নিয়ামককে পরামিতিগুলি পুনরুদ্ধার করা
এই পদ্ধতিটি সার্জির জাভাফ্যাক্স ২.০-তে কীভাবে অ্যাপ্লিকেশন.সেটপ্যারামিটারে () একটি নিয়ন্ত্রণেআর জাভা ফাইলে দেওয়া উত্তর দ্বারা উদাহরণস্বরূপ ।
নির্ভরতা ইনজেকশন ব্যবহার করুন
এফএক্সএমএলএলডার গুইস, স্প্রিং বা জাভা ইই সিডিআই এর মতো নির্ভরতা ইনজেকশন সিস্টেমগুলিকে আপনাকে এফএক্সএমএলএলএডারে একটি কাস্টম নিয়ামক কারখানা স্থাপনের অনুমতি দিয়ে সহায়তা করে। এটি একটি কলব্যাক সরবরাহ করে যা আপনি নির্ভরশীল ইনজেকশন সিস্টেম দ্বারা ইনজেকশনের উপর নির্ভরশীল মানগুলির সাথে নিয়ামক উদাহরণ তৈরি করতে ব্যবহার করতে পারেন।
জাভাএফএক্স অ্যাপ্লিকেশন এবং স্প্রিংয়ের সাথে নিয়ন্ত্রক নির্ভরতা ইনজেকশনের একটি উদাহরণ দেওয়া উত্তরে সরবরাহ করা হয়েছে:
একটি সত্যই সুন্দর, পরিষ্কার নির্ভরতা ইনজেকশন পদ্ধতির দৃষ্টান্তস্বরূপ afterburner.fx ফ্রেমওয়ার্ক এটি নমুনা এয়ার হ্যাক অ্যাপ্লিকেশন ব্যবহার করে uses afterburner.fx নির্ভরতা ইনজেকশন সঞ্চালনের জন্য JEE6 javax.inject উপর নির্ভর করে ।
ইভেন্ট বাস ব্যবহার করুন
আসল এফএক্সএমএল স্পেসিফিকেশন স্রষ্টা এবং প্রয়োগকারী গ্রেগ ব্রাউন প্রায়শই এফএক্সএমএল ইনস্ট্যান্টিয়েটেড কন্ট্রোলার এবং অন্যান্য অ্যাপ্লিকেশন যুক্তির মধ্যে যোগাযোগের জন্য গুয়ারা ইভেন্টবাসের মতো ইভেন্ট বাস ব্যবহার করার কথা বিবেচনা করার পরামর্শ দেন ।
ইভেন্টবাস এমন একটি সাধারণ তবে শক্তিশালী প্রকাশ / সাবস্ক্রাইব এপিটি যা এনওটিশনের সাথে পিওজেওগুলিকে একে অপরের সাথে রেফারেন্স না করেই কোনও জেভিএমে একে অপরের সাথে যোগাযোগ করতে দেয়।
প্রশ্নোত্তর অনুসরণ করুন
প্রথম পদ্ধতিতে, আপনি কেন পর্যায়টি ফিরবেন? পদ্ধতিটি অকার্যকরও হতে পারে কারণ আপনি ইতিমধ্যে কমান্ড শো দিয়েছিলেন (); ফিরে আসার ঠিক আগে;। পর্যায়টি ফিরেই আপনি কীভাবে ব্যবহারের পরিকল্পনা করবেন
এটি একটি সমস্যার কার্যকরী সমাধান। কোনও পর্যায়টি showCustomerDialog
ফাংশন থেকে ফিরে আসে যাতে এটির একটি রেফারেন্স কোনও বাহ্যিক শ্রেণীর দ্বারা সঞ্চয় করা যায় যা কিছু করতে ইচ্ছুক হতে পারে যেমন পরবর্তী সময়ে প্রধান উইন্ডোতে একটি বোতাম ক্লিকের উপর ভিত্তি করে মঞ্চটি আড়াল করে। একটি বিকল্প, অবজেক্ট-ভিত্তিক সমাধান গ্রাহকডায়ালগ অবজেক্টের ভিতরে কার্যকারিতা এবং মঞ্চের রেফারেন্সকে গুপ্ত করতে পারে বা গ্রাহকডায়ালগ প্রসারিত স্টেজ থাকতে পারে। এফএক্সএমএল, নিয়ামক এবং মডেল ডেটা এনক্যাপসুলেটিং কাস্টম সংলাপের কোনও অবজেক্ট-ওরিয়েন্টেড ইন্টারফেসের পুরো উদাহরণ এই উত্তরের ক্ষেত্রের বাইরে নয়, তবে যে কারও পক্ষে এটি তৈরির প্রবণতা সার্থক ব্লগ পোস্ট তৈরি করতে পারে।
@Dzim নামে স্ট্যাকওভারফ্লো ব্যবহারকারী অতিরিক্ত সরবরাহ করেছেন
স্প্রিং বুট নির্ভরতা ইনজেকশন জন্য উদাহরণ
এটি "দ্য স্প্রিং বুট ওয়ে" কীভাবে করবেন তা নিয়ে প্রশ্নটি ছিল জাভাএফএক্স 2 সম্পর্কে, যা আমি সংযুক্ত পারমিলিংকে উত্তর দিয়েছিলাম। পদ্ধতি, এখনও বৈধ এবং মার্চ 2016 সালে পরীক্ষিত উপর স্প্রিং বুট v1.3.3.RELEASE:
https://stackoverflow.com/a/36310391/1281217
কখনও কখনও, আপনি কলারের কাছে ফলাফল পুনরায় পাঠাতে চাইতে পারেন, এক্ষেত্রে আপনি সম্পর্কিত প্রশ্নের উত্তর পরীক্ষা করে দেখতে পারেন: