JavaFX:在UI屏幕之间导航的最佳实践
我想将UI屏幕从JavaFX:在UI屏幕之间导航的最佳实践,java,javafx,fxml,scene,stage,Java,Javafx,Fxml,Scene,Stage,我想将UI屏幕从login.fxml更改为home.fxml 我应该更改舞台还是场景?我不确定哪种做法是最好的? 另外,我可以为控制器中的处理程序使用lambda表达式吗?首先,让我们从阶段开始场景问题: 众所周知,JavaFX层次结构基于:Stage->场景->节点(等) 请看这里: 实际上,在我看来,一条经验法则是未来: 如果您计划转到程序流程中的其他位置(例如登录->配置文件),请更改阶段 如果您在同一环境中(第一次登录->多次错误尝试后登录)-更改场景 至于lambdas:Ahhm
login.fxml
更改为home.fxml
我应该更改舞台
还是场景
?我不确定哪种做法是最好的?
另外,我可以为控制器中的处理程序使用lambda表达式吗?首先,让我们从
阶段开始<代码>场景
问题:
众所周知,JavaFX
层次结构基于:Stage
->场景
->节点
(等)
请看这里:
实际上,在我看来,一条经验法则是未来:
- 如果您计划转到程序流程中的其他位置(例如登录->配置文件),请更改
阶段
- 如果您在同一环境中(第一次登录->多次错误尝试后登录)-更改
场景
Java
/JavaFX
版本具有此功能,则没有理由不使用。
有关中控制器处理程序的详细信息,请参阅
Java 8,见此。我在
JavaFX
中使用此方法更改场景:
/**
* Controller class for menuFrame.fxml
*/
public class MenuFrameControl implements Initializable {
@FXML private Button sceneButton1;
@FXML private Button sceneButton2;
@FXML private Button sceneButton3;
/**
* Event handling method, loads new scene from .fxml file
* according to clicked button and initialize all components.
* @param event
* @throws IOException
*/
@FXML
private void handleMenuButtonAction (ActionEvent event) throws IOException {
Stage stage = null;
Parent myNewScene = null;
if (event.getSource() == sceneButton1){
stage = (Stage) sceneButton1.getScene().getWindow();
myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene1.fxml"));
} else if (event.getSource() == sceneButton2){
stage = (Stage) flightBtn.getScene().getWindow();
myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene2.fxml"));
} else if (event.getSource() == sceneButton3) {
stage=(Stage) staffBtn.getScene().getWindow();
myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene3.fxml"));
}
Scene scene = new Scene(myNewScene);
stage.setScene(scene);
stage.setTitle("My New Scene");
stage.show();
}
@Override
public void initialize(URL location, ResourceBundle resources) { }
因此,基本上当您单击按钮时,它会将实际显示的Stage
对象保存到Stage
变量中。然后它将新的场景
对象从.fxml文件加载到myNewScene
变量中,然后将这个新加载的场景
对象放入保存的阶段
对象中
使用此代码,您可以创建基本的三个按钮菜单,其中每个按钮切换到不同的场景,只需使用单个
Stage
对象。请发布一个。我要求提供一个示例来演示此问题,因为我想知道到目前为止您尝试了什么。这是一个问题,我希望你能通过一些入门教程或稍加修改来回答自己。谢谢!我现在可能会坚持使用老式的版本,因为我将在稍后更熟悉JavaFX的时候开始并实现lambdas