來獲得點擊的信息,我希望這是最後一次後我這個開..我已經試過一切,但我對GridPane座標返回總是空,而不是整數...的JavaFX - 如何通過鼠標
這是不是這樣的線程,這是一個具體的問題,所以請不要關閉或做其他操作。我必須解決這個問題。
我的實際情況: 這裏是我的代碼。我的問題是..爲什麼當我點擊myGrid(GridPane)時,它總是返回'null'?謝謝。
來獲得點擊的信息,我希望這是最後一次後我這個開..我已經試過一切,但我對GridPane座標返回總是空,而不是整數...的JavaFX - 如何通過鼠標
這是不是這樣的線程,這是一個具體的問題,所以請不要關閉或做其他操作。我必須解決這個問題。
我的實際情況: 這裏是我的代碼。我的問題是..爲什麼當我點擊myGrid(GridPane)時,它總是返回'null'?謝謝。
你加入一些類型的Node
你GridPane
?在這個示例應用程序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>
它工作正常!我看到了你的文件FXML,我明白了!謝了哥們 – Alberto32
請將相關方法的圖片和郵政編碼片斷拿掉。圖像可能會在一段時間後消失,難以閱讀。 –
以文字形式發佈代碼而不是圖像。代碼不會提供圖像中的信息......此外,還會發布包含控制器字段的部分以及fxml文件的相關部分(如代碼)... – fabian
解釋這與[您之前發佈的問題](https://stackoverflow.com/q/45219540/2189127)。現在事件處理程序是否已註冊到其他節點,還是仍在網格窗格中註冊? –