添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Preface

Q:为什么有此文?
A:

  • 不能高度自定义化
  • 网上大部分文章是通过简易的 warning窗口 或者 information窗口 实现的,且过于繁琐
  • 大部分放在了 Main.java ,不好弄

Controller类中关键性代码:(具体代码见

//销毁当前窗口的代码
//exitButton是第二窗口的退出按钮
public void exitButtonOnMouseClicked() {
    //通过stage方式操作窗口,因为一个新的窗口就是一个新的stage
    Stage stage = (Stage)exitButton.getScene().getWindow();
    stage.close();
//平台退出的代码
//platformExitButton是第二窗口的退出按钮
public void platformExitButtonOnMouseClicked() {
    //其实,此处也可像上面操作stage一样
    Platform.exit();

窗口销毁效果

应用程序退出效果

Main.java

package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 498, 320));
        primaryStage.show();
    public static void main(String[] args) {
        launch(args);

Controller.java

package sample;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class Controller {
    @FXML
    private Button okButton;//未用到
    @FXML
    private  Button platformExitButton;
    @FXML
    private Button exitButton;
    public void okButtonOnMouseClicked() {
        //此处是为了加载新的窗口,具体请见:http://blog.csdn.net/qq_20336817/article/details/79079296
        System.out.println("fuck me!");
        try {
            AnchorPane page = FXMLLoader.load(getClass().getResource("dialog.fxml"));
            Scene newScene = new Scene(page);
            Stage stage = new Stage();
            stage.setTitle("dialog window");
            stage.setScene(newScene);
            stage.show();
        }catch (Exception e){
            e.printStackTrace();
    //销毁当前窗口的代码
    //exitButton是第二窗口的退出按钮
    public void exitButtonOnMouseClicked() {
        Stage stage = (Stage)exitButton.getScene().getWindow();
        stage.close();
    //平台退出的代码
    //platformExitButton是第二窗口的退出按钮
    public void platformExitButtonOnMouseClicked() {
        Platform.exit();

sample.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <columnConstraints>
      <ColumnConstraints />
   </columnConstraints>
   <rowConstraints>
      <RowConstraints />
   </rowConstraints>
   <children>
      <AnchorPane prefHeight="320.0" prefWidth="498.0">
         <children>
            <Button fx:id="okButton" layoutX="232.0" layoutY="203.0" mnemonicParsing="false" onMouseClicked="#okButtonOnMouseClicked" text="Emmm">
                  <Font size="17.0" />
               </font>
            </Button>
            <Label layoutX="150.0" layoutY="100.0" text="Fuck Me">
                  <Font size="21.0" />
               </font>
            </Label>
            <Button fx:id="platformExitButton" layoutX="210.0" layoutY="259.0" mnemonicParsing="false" onMouseClicked="#platformExitButtonOnMouseClicked" text="Platform Exit">
                  <Font size="17.0" />
               </font>
            </Button>
         </children>
      </AnchorPane>
   </children>
</GridPane>

dialog.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="245.0" prefWidth="314.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <Label layoutX="57.0" layoutY="51.0" text="I'm a dialog">
            <Font size="29.0" />
         </font>
      </Label>
      <Button fx:id="exitButton" layoutX="174.0" layoutY="181.0" mnemonicParsing="false" onMouseClicked="#exitButtonOnMouseClicked" text="Exit">
            <Font size="14.0" />
         </font>
      </Button>
   </children>
</AnchorPane>
PrefaceQ:为什么有此文? A:不能高度自定义化网上大部分文章是通过简易的warning窗口 或者 information窗口实现的,且过于繁琐大部分放在了Main.java,不好弄原理Controller类中关键性代码:(具体代码见附)//销毁当前窗口的代码//exitButton是第二窗口的退出按钮public void exitButtonOn...
JavaFx之从controller关闭stage(十八) 开发时,我们需要从controller的button时间中关闭当前,那么你的按钮事件可以这样: cancel.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { // 像这样关闭舞台会绕过 onCloseRequest 事件处理程序(如果有的话)
1.前言在JavaFX程序开发中,在调用子线程之后子线程还未结束时,我们点击应用程序右上角的关闭按钮的时候,我们会发现程序还没有真正的结束运行。这是因为我们的子线程没有在JavaFX的管理之下。2.如何关闭?在主方法中找到Stage,实现setOnCloseRequest的回调监听,在回调的时候执行System.exit(0)。 具体的代码实现如下:public class Main exte
当用户试图退出程序时,程序能够有机会进行确认和清理的工作。因此,正确的程序退出过程应该包含一些步骤 增加Button或菜单,让用户发布希望退出程序的信号。 (可选)显示窗口,确认用户真的希望退出程序。 执行必要的清理工作,如:关闭文件和其他资源。 执行primary stage的close方法,关闭应用程序。 虽然我们做了上述工作,但用户依然可以通过直接点击窗口右上角X的方式绕过我们精心设计的代码,
事件(event)就是用户使用鼠标或键盘对窗口中的控件进行交互时发生的事情 所谓事件源(event source)就是能够产生事件并触发它的控件 事件源和监听者之间是多对多的关系 利用匿名内部充当监听 package sample; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXMLLoa
将整个面板划分为若干个格子 , 每个格子的大小是一样的 , 每个格子中可以放置一个控件(布局) , 似于表格的方式。在网格布局 中放入控件的时候 , 还需要指定位置。 我们将要排出这个布局 , 也就是登陆页面的优化版本 位置原理讲解 以网格布局的思维来拆分该布局 , 可以分出一个 2*3 的网格 GridPane gridPane = new GridPane (); 我们可以给格子从上到下 , 从左到右依次编号 ,
JavaFX中,Controller是用来控制用户界面和后端逻辑之间交互的组件。Controller通常与FXML文件关联,用于处理用户界面上的事件和数据绑定。 在给定的引用中,\[1\]展示了一个FXML文件的代码片段,其中指定了Controller名。这个Controller是LoginController,并且与FXML文件中的元素进行了绑定。 \[2\]展示了LoginController的代码片段,其中使用了@FXML注解来注入FXML文件中的元素,例如TextField和PasswordField。这样,Controller就可以通过这些注入的元素来访问和操作用户界面上的组件。 \[3\]展示了另一个Controller的代码片段,名为MainLayoutController。这个Controller也使用了@FXML注解来注入FXML文件中的元素,例如Button和Label。此外,它还定义了一个onButtonClick方法,用于处理按钮点击事件。 总结起来,JavaFXController用于处理用户界面上的事件和数据绑定。通过使用@FXML注解,Controller可以方便地访问和操作FXML文件中的元素。 #### 引用[.reference_title] - *1* *2* [JavaFX开发教程——前后端交互(Controller)](https://blog.csdn.net/qq_42451456/article/details/126130967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaFX之FXController详解](https://blog.csdn.net/ml3947/article/details/41349855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]