首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javafx矩形onmouseclick事件(fxml)

javafx矩形onmouseclick事件(fxml)
EN

Stack Overflow用户
提问于 2017-04-11 07:31:54
回答 1查看 6.6K关注 0票数 0

我现在正在编写一个叫做“法克尔”的游戏。我想为每个表示骰子的矩形添加一个OnMouseClick事件。

我的问题是矩形不识别MouseEvent。我用场景生成器构建了我的GUI。这是我的FXML代码的摘录:

代码语言:javascript
复制
<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代码的摘录:

代码语言:javascript
复制
@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);
}

进口:

代码语言:javascript
复制
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。我试过同样的按钮,效果很好。

EN

回答 1

Stack Overflow用户

发布于 2017-04-11 14:57:35

这是一些你可以分析的东西。

Main:

代码语言:javascript
复制
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class Farkle extends Application
{

    @Override
    public void start(Stage stage) throws Exception
    {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

}

FXML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.shape.Rectangle?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="farkle.FXMLDocumentController">
    <children>
        <Button fx:id="button" layoutX="128.0" layoutY="155.0" onAction="#handleOnButtonAction" text="Click Me!" />
      <GridPane layoutX="6.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        </columnConstraints>
        <rowConstraints>
          <RowConstraints minHeight="100.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <Rectangle fx:id="recDice1" arcHeight="5.0" arcWidth="5.0" fill="DODGERBLUE" height="100.0" onMouseClicked="#handleOnMouseClicked" stroke="BLACK" strokeType="INSIDE" width="160.0" />
            <Rectangle fx:id="recDice2" arcHeight="5.0" arcWidth="5.0" fill="DODGERBLUE" height="100.0" onMouseClicked="#handleOnMouseClicked" stroke="BLACK" strokeType="INSIDE" width="160.0" GridPane.columnIndex="1" />
         </children>
      </GridPane>
    </children>
</AnchorPane>

主计长:

代码语言:javascript
复制
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Rectangle;

/**
 *
 * @author blj0011
 */
public class FXMLDocumentController implements Initializable
{    
    @FXML
    private void handleOnButtonAction(ActionEvent event)
    {
        System.out.println("You clicked button: " + ((Button)event.getSource()).getId());
    }

    @FXML private void handleOnMouseClicked(MouseEvent event)
    {
        System.out.println("You clicked rectangle: " + ((Rectangle)event.getSource()).getId());
    }

    @Override
    public void initialize(URL url, ResourceBundle rb)
    {
        // TODO
    }        
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43339458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档