我在 JavaFX 中有一个应用程序,它有带有菜单和工具栏的主场景,以及在按下菜单按钮之一后注入到该主场景中的较小场景。
现在,HomeCntroller 负责场景组件:主场景(带有工具栏和菜单)和注入场景。如果注入的场景数量超过一个,这会导致我创建巨大且非常不专业的控制器。
如何划分控制器职责?
现在我的控制器看起来像这样:
changeDashboardPane 方法将较小的窗格注入到我的主 HomePane 中。
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired) )
public class HomeController extends AbstractController {
private static final Logger LOG = Logger.getLogger(HomeController.class);
private final BudgetProfileService budgetProfileService;
@FXML
private Label usernameLabel;
@FXML
private ComboBox<String> budgetProfilesComboBox;
@FXML
private AnchorPane dashBoardPane;
@FXML
public void initialize() {
refreshUsernameLabel();
getAllBudgetProfiles();
changeDashboardPane(PaneFactoryKeys.FINANCES_PANE);
}
private void refreshUsernameLabel() {
String username = UserAccountProvider.getLoggedUser().getUsername();
usernameLabel.setText(username);
}
private void getAllBudgetProfiles() {
List<String> budgetProfileNames = budgetProfileService.getAllBudgetProfileNames();
if (!budgetProfileNames.isEmpty()) {
budgetProfilesComboBox.getItems().clear();
budgetProfilesComboBox.getItems().addAll(budgetProfileNames);
}
}
@FXML
public void handleFinancesButtonAction() {
changeDashboardPane(PaneFactoryKeys.FINANCES_PANE);
}
@FXML
public void handlePeriodButtonAction() {
changeDashboardPane(PaneFactoryKeys.PERIOD_PANE);
}
@FXML
public void handleStatisticsButtonAction() {
changeDashboardPane(PaneFactoryKeys.STATISTICS_PANE);
}
@FXML
public void handleSettingsButtonAction() {
changeDashboardPane(PaneFactoryKeys.SETTINGS_PANE);
}
private final void changeDashboardPane(String paneFactoryKey) {
double injectedPanePosition = 0.0;
Pane paneToChange = getPaneFromFactory(paneFactoryKey);
dashBoardPane.getChildren().clear();
AnchorPane.setTopAnchor(paneToChange, injectedPanePosition);
dashBoardPane.getChildren().add(paneToChange);
}
}
为了更清楚地说明这一点,屏幕:
没有注入第二个窗格 https://postimg.org/image/4byk98hfx/
带有注入的第二个窗格 https://postimg.org/image/3nppqaiq5/
大家有什么想法吗?
我建议您将主场景划分为较小的场景,例如您可以有一个工具场景、一个标题场景、一个内容场景等。那么你应该为每个场景配备一个控制器。
之后,我将使用发布者-订阅者模式来处理行为,例如当您按下设置场景上的按钮时,它会触发其他场景侦听的事件,然后它们会相应地更改其状态来处理该事件。
我希望它很清楚并且可以提供帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)