我有两个场景,场景1上面有一个标签,上面写着“这就是场景1”,它上面还有一个带有“按我转到场景2”文本的按钮。场景2类似于场景1,但场景2上的标签和文字则相反。
问题很简单,或者至少应该是。我能够以javaFX方式执行此操作,但似乎无法以FXML方式执行此操作。
我有一个主要的课程 -
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class ManinApp extends Application
{
Stage primaryStage;
private AnchorPane rootLayout;
public static void main(String [] args)
{
launch(args);
}
public void start(Stage primaryStage)
{
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Two Scenes");
initRootLayout();
//showSecondScene();
}
public void initRootLayout()
{
try
{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(ManinApp.class.getResource("Scene1.fxml"));
rootLayout = (AnchorPane) loader.load();
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.show();
}
catch(IOException e)
{
e.printStackTrace();
}
}
/**
public void showSecondScene()
{
try
{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(ManinApp.class.getResource("Scene2.fxml"));
AnchorPane secondScene = (AnchorPane)loader.load();
rootLayout.getChildren().add(secondScene);
}
catch(IOException e)
{
e.printStackTrace();
}
}
*/
public Stage getPrimaryStage()
{
return primaryStage;
}
}
showSecondScene()目前已被注释掉了。我的理解是你还需要一个Controller类来将代码连接到SceneBuilder?
FX方式的解决方案
btnscene1.setOnAction(e ->
{
if(e.getSource() == btnscene1)
thestage.setScene(scene2);
else
thestage.setScene(scene1);
});
btnscene2.setOnAction(e ->
{
if(e.getSource()==btnscene2)
thestage.setScene(scene1);
else
thestage.setScene(scene2);
});
格式化道歉!
我如何使用控制器类来执行此操作,从中我可以使用主阶段和我的主类中声明的两个场景?
我希望它有意义
答案 0 :(得分:1)
我认为你做得很好。 FXML(和SceneBuilder)在这里使用正确。
我会建议一些事情:
现在,如果布局很大,涉及很多css,并且您需要经常从layout1切换到layout2,您可能希望在根容器中添加两个布局。然后,使用:
setVisible()
setManaged()
...在要隐藏/显示的布局的根目录上。 这样做,您可以避免在场景图中添加节点后立即执行的布局和CSS步骤。
答案 1 :(得分:0)
虽然我在技术上理解了你想要实现的目标,但我仍然对其背后的原因感到失望。
如果您只想切换" main"窗口的内容,使用StackPane作为根,向该堆栈添加多个布局,并通过切换您想要在#toFront()上工作的那个来解决您的问题。
通常情况下,堆栈上的布局是透明的(当然除了按钮之类的控件等),因此您需要设置堆叠布局的背景 OR (我更喜欢)切换后面一个的可见性(或将opaqueness设置为0,或类似的东西)。