java - 如何在 FXML 应用程序中主类和 Controller 类之间进行通信

标签 java javafx fxml

我想在主类和 Controller 类之间通信阶段,这样我就可以使我的阶段可以从 Controller 类中的代码中拖动。最有效的方法是什么?

Main.java:

package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.FileReader;
import java.util.List;
import java.util.Map;

import javafx.stage.StageStyle;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class Main extends Application {

  public Stage stage;
  @Override
  public void start(Stage primaryStage) throws Exception{
      stage = primaryStage;
      Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
      stage.initStyle(StageStyle.UNDECORATED);
      stage.setTitle("WordToday");
      Scene scene = new Scene(root, 300, 200);
      stage.setScene(scene);
      stage.setX(5);
      stage.show();

      //FileReader reader = new       FileReader("C:\\Users\\Snipester\\IdeaProjects\\WordToday\\src\\sample\\Words.json");
      //JSONObject jsonObj = (JSONObject) new JSONParser().parse(reader);
      //JSONArray jsonArray = (JSONArray) jsonObj.get("Gre");
      //List<Map<String, String>> list = jsonArray;
      //System.out.println(list.get(0).get("word"));

  }


  public static void main(String[] args) {
      launch(args);
  }
}

Controller .java:

package sample;

import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ToolBar;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;

public class Controller{


    public Button exitButton;
    public ToolBar titleBar;
    private double x, y;


    //exit button
    public void exitButtonClicked() {
        Platform.exit();
    }

    //mouse pressed
    public void MouseClicked(MouseEvent event){
        //x = event.getSceneX();
        //y = event.getSceneY();
    }

    //mouse dragged
    public void MouseDragged(MouseEvent event){
       // stage.setX(event.getScreenX()-x);
        //stage.setY(event.getScreenY()-y);

    }

}

FXML:

 <ToolBar fx:id="titleBar"
           prefHeight="20.0"
           prefWidth="600.0"
           GridPane.rowIndex="0"
           onMouseClicked="#MouseClicked"
           onMouseDragged="#MouseDragged"
           />

最佳答案

您可以在任何节点上使用 getScene()getScene().getWindow():

//mouse pressed
public void MouseClicked(MouseEvent event){
    double x = event.getSceneX();
    double y = event.getSceneY();
    Scene scene = titleBar.getScene();
    Window window = scene.getWindow();
    // etc...
}

关于java - 如何在 FXML 应用程序中主类和 Controller 类之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34976069/

相关文章:

java - 向我的基本 'Sound Adventure'游戏添加声音

JavaFX 表格 View 调整大小以适合窗口

java - 在 FXML Controller 类中找不到可注入(inject)字段

Javafx:使用 FXML 的可重用集合

IDS 的 Java 应用程序设计

java - Jackson - 将内部对象列表反序列化为更高级别的列表

java - 如何从外部包资源导入 CSS 文件

Java 方法,打印一条欢迎消息,然后打印一条感谢消息

java - 从 mvn jetty :run 启动 Jetty 时出错

java - 老虎机时间线动画不起作用