的JavaFX - 如何通过鼠标

问题描述:

来获得点击的信息,我希望这是最后一次后我这个开..我已经试过一切,但我对GridPane坐标返回总是空,而不是整数...的JavaFX - 如何通过鼠标

这是不是这样的线程,这是一个具体的问题,所以请不要关闭或做其他操作。我必须解决这个问题。

我的实际情况: Project othello Scene Builder 这里是我的代码。我的问题是..为什么当我点击myGrid(GridPane)时,它总是返回'null'?谢谢。

My method clickGrid 这里我控制器FXML:

Controller's name

+1

请将相关方法的图片和邮政编码片断拿掉。图像可能会在一段时间后消失,难以阅读。 –

+2

以文字形式发布代码而不是图像。代码不会提供图像中的信息......此外,还会发布包含控制器字段的部分以及fxml文件的相关部分(如代码)... – f*

+2

解释这与[您之前发布的问题](https://*.com/q/45219540/2189127)。现在事件处理程序是否已注册到其他节点,还是仍在网格窗格中注册? –

你加入一些类型的NodeGridPane?在这个示例应用程序StackPane s被添加到每个Grid。所有StackPane上都注册了相同的事件处理程序。

主要

package javafxapplication147; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

/** 
* 
* @author blj0011 
*/ 
public class JavaFXApplication147 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); 
    } 

} 

控制器

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.Node; 
import javafx.scene.control.Label; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.GridPane; 

/** 
* 
* @author blj0011 
*/ 
public class FXMLDocumentController implements Initializable 
{ 

    @FXML 
    private Label lblMain; 

    @FXML 
    private void handleOnMouseClicked(MouseEvent event) 
    { 
     Node source = (Node)event.getSource(); 
     Integer colIndex = (GridPane.getColumnIndex(source) == null) ? 0 : (GridPane.getColumnIndex(source)); 
     Integer colRow = (GridPane.getRowIndex(source) == null) ? 0 : (GridPane.getRowIndex(source)); 
     lblMain.setText(colIndex + " : " + colRow); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) 
    { 
     // TODO 
    }  

} 

FXML

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.geometry.Insets?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.ColumnConstraints?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.layout.RowConstraints?> 
<?import javafx.scene.layout.StackPane?> 
<?import javafx.scene.layout.VBox?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxapplication147.FXMLDocumentController"> 
    <children> 
     <VBox layoutX="48.0" layoutY="14.0" prefHeight="200.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="0.0"> 
     <children> 
      <GridPane gridLinesVisible="true" style="-fx-background-color: green;"> 
       <columnConstraints> 
       <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
        <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="100.0" vgrow="SOMETIMES" /> 
       <RowConstraints minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" /> 
       <RowConstraints minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" /> 
       <RowConstraints minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" /> 
        <RowConstraints minHeight="100.0" prefHeight="100.0" vgrow="SOMETIMES" /> 
       </rowConstraints> 
       <VBox.margin> 
        <Insets top="10.0" /> 
       </VBox.margin> 
       <children> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="1" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="2" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="3" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="1" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="1" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="1" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="2" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="2" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="2" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="3" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="3" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="3" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.rowIndex="4" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="4" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.rowIndex="4" /> 
        <StackPane onMouseClicked="#handleOnMouseClicked" prefHeight="150.0" prefWidth="200.0" GridPane.columnIndex="3" GridPane.rowIndex="4" /> 
       </children> 
      </GridPane> 
      <StackPane prefHeight="150.0" prefWidth="200.0"> 
       <children> 
        <Label fx:id="lblMain" text="Label" /> 
       </children> 
      </StackPane> 
     </children> 
     </VBox> 
    </children> 
</AnchorPane> 
+0

它工作正常!我看到了你的文件FXML,我明白了!谢了哥们 – Alberto32