我目前正在编写一个名为Farkle的游戏。我想为每个代表骰子的矩形添加一个OnMouseClick事件。javafx rectangle onmouseclick event(fxml)
我的问题是矩形不能识别MouseEvent。我使用Scene Builder构建了我的GUI。这是我的FXML代码的摘录:
<Rectangle fx:id="recDice1" arcHeight="5.0" arcWidth="5.0" fill="WHITE"
height="40.0" onMouseClicked="#recDice1_OnMouseClicked" stroke="BLACK"
strokeType="INSIDE" width="40.0" GridPane.halignment="CENTER"
GridPane.valignment="CENTER" />
的矩形处于GridPane和GridPane被下令在BorderPane的左侧。
这是我的Java代码的摘录:
@FXML private Rectangle recDice1;
@FXML public void recDice1_OnMouseClicked(MouseEvent event){
System.out.println("Funktioniert!");
}
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Farkle");
initLayout();
}
public void initLayout(){
try {
//Erstelle FXMLLoader
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("../gui/FarkleGUI.fxml"));
loader.setController(new FarkleControl());
rootLayout = (BorderPane) loader.load();
//Lade Szene
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
primaryStage.setResizable(false);
//Setze Grösse der Stage (Somit entfallen Margins)
primaryStage.sizeToScene();
//Zeige Szene
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
进口:
package java2.farkle.mlz.control;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
就像我在一开始的矩形不承认的MouseEvent说。我尝试了与按钮相同,它工作正常。
如果您正在使用Scenebuilder,可以假定您正在使用MVC创意。但是,在你的代码中你不是。您使用Scenebuilder更改的FXML文件具有您应该使用的控制器文件。在MVC中几乎所有情况下,你都不应该对Main文件做任何事情。您的@FXML代码应该位于与FXML文件关联的控制器中。 – Sedrick