JRebirth Application Framework अपने समर्पित पैटर्न डब्लूबी-सीएसएमवीसी का उपयोग करके एक कस्टम 'कार्डलाउट' प्रदान करता है।
StackModel कक्षा नौकरी करेगी (org.jrebirth.af:component artifact द्वारा प्रदान की गई), आप 2 उपयोग here और here पा सकते हैं।
प्रत्येक 'कार्ड' मॉडल को enum | modelKey पहचानकर्ता का उपयोग करके बुलाया जा सकता है, और प्रत्येक स्टैक का एक अद्वितीय नाम होता है।
पहला नमूना JRebirth Demo Application के लिए उपयोग किया जाता है, यह एक बहुत ही सरल एप्लीकेशन है जो अन्य जेआरबर्थ शोकेस अनुप्रयोगों को गतिशील रूप से जेआरबर्थ मॉड्यूल (एक अलग और स्वतंत्र जार से) के रूप में लोड करने की अनुमति देगा।
public final class JRebirthDemo extends DefaultApplication<StackPane> {
public static void main(final String... args) {
Application.launch(JRebirthDemo.class, args);
}
@Override
public Class<? extends Model> firstModelClass() {
return MainModel.class;
}
@Override
protected String applicationTitle() {
return "JRebirth Demo Application";
}
@Override
protected void customizeScene(final Scene scene) {
super.customizeScene(scene);
addCSS(scene, DemoStyles.DEFAULT);
addCSS(scene, WorkbenchStyles.DEFAULT);
}
@Override
protected void customizeStage(final Stage stage) {
// Center the stage
stage.centerOnScreen();
}
@Override
protected List<? extends ResourceItem<?, ?, ?>> getResourceToPreload() {
return Collections.emptyList();
}
}
इस आवेदन अपनी पहली मॉडल (MainModel) लोड और दृश्य रूट नोड (StakPane, स्वचालित रूप से बनाया गया) में अपने रूट नोड डाल देंगे।
मेनमोडेल अपने बाएं मेनू में बटन प्रविष्टियों को जोड़ने के लिए सभी एप्लिकेशन के उप मॉड्यूल सूचीबद्ध करेगा, और एक स्टैकमोडेल जो प्रत्येक मॉड्यूल सामग्री प्रदर्शित करेगा। स्टैकमोडेल को अपनी अनन्य स्ट्रिंग कुंजी का उपयोग करके विशेष एनोटेशन का उपयोग करके लोड किया जाता है।
public final class MainModel extends DefaultModel<MainModel, MainView> {
private final List<ModuleModel> modules = new ArrayList<>();
@Link("DemoStack")
private StackModel stackModel;
@Override
protected void initModel() {
for (final ModuleModel mm : getModels(ModuleModel.class)) {
this.modules.add(mm);
}
}
@Override
protected void showView() {
view().node().setCenter(this.stackModel.node());
}
@Override
protected void hideView() {
// Nothing to do yet
}
List<ModuleModel> getModules() {
return this.modules;
}
}
MainView आरोप में हो जाएगा मॉड्यूल मेनू बनाने के लिए:
public final class MainView extends DefaultView<MainModel, BorderPane, MainController> {
private final List<Button> buttonList = new ArrayList<>();
public MainView(final MainModel model) throws CoreException {
super(model);
}
@Override
protected void initView() {
node().setPrefSize(800, 600);
node().setLeft(createMenu());
}
@Override
public void start() {
this.buttonList.stream().findFirst().ifPresent(button -> button.fire());
}
private Node createMenu() {
final VBox box = new VBox();
for (final ModuleModel mm : model().getModules()) {
final Node n = createModuleButton(mm);
VBox.setMargin(n, new Insets(4, 4, 4, 4));
box.getChildren().add(n);
}
return box;
}
private Node createModuleButton(final ModuleModel mm) {
final Button b = new Button(mm.moduleName());
b.getStyleClass().add("menuButton");
b.setPrefSize(100, 50);
b.setOnAction(controller()::onButtonFired);
b.setUserData(Key.create(mm.getClass()));
this.buttonList.add(b);
return b;
}
}
और MainController मॉड्यूल सामग्री जब किसी भी मेनू बटन शुरू हो रहा है लोड होगा:
public final class MainController extends DefaultController<MainModel, MainView> implements ActionAdapter {
public MainController(final MainView view) throws CoreException {
super(view);
}
public void onButtonFired(final ActionEvent event) {
final Button b = (Button) event.getSource();
final UniqueKey<? extends Model> data = (UniqueKey<? extends Model>) b.getUserData();
model().sendWave(StackWaves.SHOW_PAGE_MODEL,
WBuilder.waveData(StackWaves.PAGE_MODEL_KEY, data),
WBuilder.waveData(StackWaves.STACK_NAME, "DemoStack"));
}
}
दूसरा उदाहरण StackModel को एक आंतरिक कॉम्पोनेंट के रूप में लोड करेगा और प्रत्येक कार्ड को एनम एंट्री (FXMLPage में संग्रहीत) द्वारा पहचाना जाएगा, चलिए FXMLShowCaseModel देखें:
final InnerComponent<StackModel> stack = CBuilder.innerComponent(StackModel.class, FXMLPage.class);
this.stackModel = findInnerComponent(stack);
गणन कि मॉडल के साथ enum प्रविष्टि लिंक:
public enum FXMLPage implements PageEnum {
StandaloneFxml,
IncludedFxml,
ViewEmbeddedFxml,
HybridFxml;
@Override
public UniqueKey<? extends Model> getModelKey() {
UniqueKey<? extends Model> modelKey;
switch (this) {
default:
case ViewEmbeddedFxml:
modelKey = Key.create(EmbeddedModel.class);
break;
case StandaloneFxml:
modelKey = Key.create(StandaloneModel.class);
break;
case HybridFxml:
modelKey = Key.create(HybridModel.class, FXMLModel.KEYPART_FXML_PREFIX + "org.jrebirth.af.showcase.fxml.ui.hybrid.Hybrid");
break;
case IncludedFxml:
modelKey = Key.create(IncludedModel.class, new LoremIpsum());
break;
}
return modelKey;
}
}
के रूप में कार्ड सूची में जाना जाता है, उपकरण पट्टी आइटम स्थिर FXMLShowCaseView में बनाई गई हैं और घटना से निपटने के भी staically एक और तकनीक का उपयोग कर FXMLShowCaseController में परिभाषित किया गया है:
public final class FXMLShowCaseController extends DefaultController<FXMLShowCaseModel, FXMLShowCaseView> {
private static final Logger LOGGER = LoggerFactory.getLogger(FXMLShowCaseController.class);
public FXMLShowCaseController(final FXMLShowCaseView view) throws CoreException {
super(view);
}
@Override
protected void initEventAdapters() throws CoreException {
// WaveData<Class<? extends PageEnum>> stackName = Builders.waveData(StackWaves.STACK_PAGES, FXMLShowCaseModel.STACK_PAGES);
// Manage Ui Command Button
linkWave(view().getShowIncluded(), ActionEvent.ACTION, StackWaves.SHOW_PAGE_ENUM,
WBuilder.waveData(StackWaves.PAGE_ENUM, FXMLPage.IncludedFxml));
linkWave(view().getShowEmbedded(), ActionEvent.ACTION, StackWaves.SHOW_PAGE_ENUM,
WBuilder.waveData(StackWaves.PAGE_ENUM, FXMLPage.ViewEmbeddedFxml));
linkWave(view().getShowStandalone(), ActionEvent.ACTION, StackWaves.SHOW_PAGE_ENUM,
WBuilder.waveData(StackWaves.PAGE_ENUM, FXMLPage.StandaloneFxml));
linkWave(view().getShowHybrid(), ActionEvent.ACTION, StackWaves.SHOW_PAGE_ENUM,
WBuilder.waveData(StackWaves.PAGE_ENUM, FXMLPage.HybridFxml));
}
}
मुझे बताएं कि क्या आपके पास कोई प्रश्न है