2017-07-21 37 views
-1

來獲得點擊的信息,我希望這是最後一次後我這個開..我已經試過一切,但我對GridPane座標返回總是空,而不是整數...的JavaFX - 如何通過鼠標

這是不是這樣的線程,這是一個具體的問題,所以請不要關閉或做其他操作。我必須解決這個問題。

我的實際情況: Project othello Scene Builder 這裏是我的代碼。我的問題是..爲什麼當我點擊myGrid(GridPane)時,它總是返回'null'?謝謝。

My method clickGrid 這裏我控制器FXML:

Controller's name

+1

請將相關方法的圖片和郵政編碼片斷拿掉。圖像可能會在一段時間後消失,難以閱讀。 –

+2

以文字形式發佈代碼而不是圖像。代碼不會提供圖像中的信息......此外,還會發布包含控制器字段的部分以及fxml文件的相關部分(如代碼)... – fabian

+2

解釋這與[您之前發佈的問題](https://stackoverflow.com/q/45219540/2189127)。現在事件處理程序是否已註冊到其他節點,還是仍在網格窗格中註冊? –

回答

0

你加入一些類型的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