JavaFX 打开新窗口
Posted
技术标签:
【中文标题】JavaFX 打开新窗口【英文标题】:JavaFX open new window 【发布时间】:2013-02-09 02:36:24 【问题描述】:查看this code,他们展示了一种在登录后显示新窗口的方法。当用户名和密码正确时,它会打开新对话框。我想要一个按钮点击打开新对话框,而不检查用户名和密码。
【问题讨论】:
花时间学习这些东西很重要。如果您希望以任何方式使用 JavaFX,我建议您阅读一些教程。我会推荐this one 链接失效 【参考方案1】:如果你只是想要一个按钮来打开一个新窗口,那么这样的工作:
btnOpenNewWindow.setOnAction(new EventHandler<ActionEvent>()
public void handle(ActionEvent event)
Parent root;
try
root = FXMLLoader.load(getClass().getClassLoader().getResource("path/to/other/view.fxml"), resources);
Stage stage = new Stage();
stage.setTitle("My New Stage Title");
stage.setScene(new Scene(root, 450, 450));
stage.show();
// Hide this current window (if this is what you want)
((Node)(event.getSource())).getScene().getWindow().hide();
catch (IOException e)
e.printStackTrace();
【讨论】:
有没有办法“删除”现有窗口而不是隐藏它? @willclose
ing 和 hide
ing 一个窗口是一回事。 this answer 擅长解释这个概念。
我的意思是删除它作为删除实例。我有一个长时间运行的应用程序(几周),我不需要收集任何非垃圾资源来收集棉绒。
就是这样。 hide
ing 或close
ing 将删除它。只需删除对这个窗口/舞台的任何引用(就像你对任何其他 java 对象所做的那样)。
@Line 在这个例子中不是真的。但是假设您想在 try 块之外使用 root
做其他事情,那么它会很有用。【参考方案2】:
我在我的 JavaFX 应用程序中使用以下方法。
newWindowButton.setOnMouseClicked((event) ->
try
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("NewWindow.fxml"));
/*
* if "fx:controller" is not set in fxml
* fxmlLoader.setController(NewWindowController);
*/
Scene scene = new Scene(fxmlLoader.load(), 600, 400);
Stage stage = new Stage();
stage.setTitle("New Window");
stage.setScene(scene);
stage.show();
catch (IOException e)
Logger logger = Logger.getLogger(getClass().getName());
logger.log(Level.SEVERE, "Failed to create new Window.", e);
);
【讨论】:
【参考方案3】:下面的代码对我有用,我在按钮类中使用了上面的部分代码。
public Button signupB;
public void handleButtonClick ()
try
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("sceneNotAvailable.fxml"));
/*
* if "fx:controller" is not set in fxml
* fxmlLoader.setController(NewWindowController);
*/
Scene scene = new Scene(fxmlLoader.load(), 630, 400);
Stage stage = new Stage();
stage.setTitle("New Window");
stage.setScene(scene);
stage.show();
catch (IOException e)
Logger logger = Logger.getLogger(getClass().getName());
logger.log(Level.SEVERE, "Failed to create new Window.", e);
【讨论】:
以上是关于JavaFX 打开新窗口的主要内容,如果未能解决你的问题,请参考以下文章