私は現在Farkleというゲームをプログラミングしています。私は、ダイスを表す四角形ごとにOnMouseClickイベントを追加したいと思います。javafx矩形onmouseclickイベント(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" />
Rectangleが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ではほとんどの場合、メインファイルに何もしないでください。あなたの@FXMLコードは、FXMLファイルに関連付けられているコントローラ内になければなりません。 – Sedrick