Preface
Q:为什么有此文?
A:
-
不能高度自定义化
-
网上大部分文章是通过简易的
warning窗口
或者
information窗口
实现的,且过于繁琐
-
大部分放在了
Main.java
,不好弄
Controller类中关键性代码:(具体代码见
附
)
public void exitButtonOnMouseClicked() {
Stage stage = (Stage)exitButton.getScene().getWindow();
stage.close();
public void platformExitButtonOnMouseClicked() {
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() {
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();
public void exitButtonOnMouseClicked() {
Stage stage = (Stage)exitButton.getScene().getWindow();
stage.close();
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方法,用于处理按钮点击事件。
总结起来,JavaFX的Controller类用于处理用户界面上的事件和数据绑定。通过使用@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 ]