当前位置: 首页 > 知识库问答 >
问题:

如何在 FXML 应用程序中的主类和控制器类之间进行阶段通信

乌俊健
2023-03-14

我想在主类和控制器类之间进行阶段通信,以便可以从控制器类中的代码拖动阶段。做这件事最有效的方法是什么?

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);
  }
}

控制器.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"
           />

共有1个答案

张鸿宝
2023-03-14

您可以在任何节点上使用获取”和“获取”

//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 Code在Android平板电脑与台式机之间的通信有关。 上面的代码是我的servlet代码,它在我的本地系统服务器(Tomcat 6.0)中运行,在这里,我正在通过println发送消息,并且我想在另一个系统中运行的Android应用中显示相同的消息。现在,我要发布在另一个系统上运行的android代码。 这里的192

  • 如何解释文件与其对应的控制器类之间的关系

  • 如果JavaFX项目中有3个文件;FXML文件、FXML控制器和应用程序类;控制器如何通过改变点击时的屏幕(通常使用)来响应按钮点击(工作非常好)?我没有对stage的引用(它被传递到应用程序类的)。 应用程序示例: FXML示例: 控制器示例:

  • 是关于JavaFX的。当我想在Scene Builder中注入fx:id时,我会得到这样的警告: 在FXML控制器类中找不到id为'something'的可注入字段。 我想忽略它,并创建了一个函数,但它也不起作用。我创建了mainController类并将其添加到我的FXML文件中。以下是我的代码… MainController.java 我在我的旧项目中做了同样的事情,它们像一个魅力一样工作。但

  • 问题内容: 我正在尝试建立一个可以相互转换的类型家族。例如,Float和Double可以通过其初始值设定项相互转换。我不想创建一个详尽的初始化列表,以显示每种类型都可以转换为每种其他类型。 我试图在Playground中做类似的事情,但是崩溃了: 我的最终目标不仅仅是做转换,但乘以通过像这样: 这样我就可以表示乘法。 有没有办法做到这一点?我认为问题的一部分是由看起来像这样的结构来解决的,但是我认