我正在我的应用程序中试用JFX拖放特性(稍后以一个序列连接对象)。我找不到任何简单的方法拖放我的ImageView/按钮在我的窗格的适当位置,因此我计划应用GridPane的使用。GridPane将是一个包含超过(50x50)个单元格的大画布。
如果我在代码中指定需要通过ImageView在(2,2)单元格处拖放,我就能够做到这一点。但是,我需要给我的用户这个访问权限。用户可以在网格中移动指针,并将ImageView/按钮放在网格中的任何单元格上。
现在,我想找出在GridPane的特定单元格中输入的鼠标上的单元格的rowID和columnID。
我在控制器中处理鼠标事件如下:
package sample;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.*;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable{
Stage stage;
@FXML
private GridPane gridPane;
public void setStage(Stage primaryStage){
stage = primaryStage;
}
@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println("initialize");
}
@FXML
private void handleMouseEntered(MouseEvent event){
System.out.println("MouseEntered");
}
}
在gridpane中输入时,我只得到一次“mouseEnter”。此外,我无法获得任何RowID和ColumnID,因此,我没有在函数中编写任何函数。
我想知道两件事:
[]如何在GridPane的每个单元格中检测鼠标进入?
[]如何找出特定单元格的行和列ID?
提前道谢。
您可以通过调用GridPane.GetColumnIndex(node)
和GridPane.GetRowIndex(node)
来获取值。
您还没有展示在网格窗格中放入了什么,甚至是用FXML还是Java填充它,但这里有一些基本功能。在这里,我(冗长地)用FXML填充GridPane
。根据您的用例,用Java填充可能更好(即在控制器中)。(这样,处理程序也变得更干净了。)
控制器类:
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
public class GridPaneTrackingController {
@FXML
private void mouseEntered(MouseEvent e) {
Node source = (Node)e.getSource() ;
Integer colIndex = GridPane.getColumnIndex(source);
Integer rowIndex = GridPane.getRowIndex(source);
System.out.printf("Mouse entered cell [%d, %d]%n", colIndex.intValue(), rowIndex.intValue());
}
}
如果您不想在FXML中定义单元格的内容,那么您可以只在控制器中定义它们。这使得事情变得更简单,因为您可以在定义监听器时注册它们:
import javafx.fxml.FXML;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
public class GridPaneTrackingController {
@FXML
private GridPane grid ;
public void initialize() {
int numCols = 4 ;
int numRows = 4 ;
for (int i = 0 ; i < numCols ; i++) {
ColumnConstraints colConstraints = new ColumnConstraints();
colConstraints.setHgrow(Priority.SOMETIMES);
grid.getColumnConstraints().add(colConstraints);
}
for (int i = 0 ; i < numRows ; i++) {
RowConstraints rowConstraints = new RowConstraints();
rowConstraints.setVgrow(Priority.SOMETIMES);
grid.getRowConstraints().add(rowConstraints);
}
for (int i = 0 ; i < numCols ; i++) {
for (int j = 0; j < numRows; j++) {
addPane(i, j);
}
}
}
private void addPane(int colIndex, int rowIndex) {
Pane pane = new Pane();
pane.setOnMouseEntered(e -> {
System.out.printf("Mouse enetered cell [%d, %d]%n", colIndex, rowIndex);
});
grid.add(pane, colIndex, rowIndex);
}
}
FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.GridPane?>
<GridPane xmlns:fx="http://javafx.com/fxml/1"
fx:controller="GridPaneTrackingController"
fx:id="grid" gridLinesVisible="true">
</GridPane>
应用:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class GridPaneTrackingExample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
GridPane root = FXMLLoader.load(getClass().getResource("GridPaneTrackingExample.fxml"));
primaryStage.setScene(new Scene(root, 800, 800));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
好吧,如上所述,我在我的javafx应用程序中有网格窗格,并且我试图获取它,以便当我将鼠标悬停在单个单元格上时,鼠标所在的单元格将变为黄色(认为excel有点东西)。我不知道如何做到这一点,然后在鼠标离开手机后重置它。 这就是我现在拥有它的方式,但它只是在鼠标悬停时改变一种颜色,然后保持该颜色。整个表格也不会更改每个单元格。有人帮忙吗?
我有一个GridPane,如下所示: 我想通过代码合并网格中心的3列,但我找不到这样做的方法。有一个如何通过场景构建器实现这个的参考,但是我不用场景构建器。 有人知道如何合并它们吗?
我想找到获得单元格中许多元素的列和行索引的最佳解决方案。 比如我有GridPane(15x15)。每个单元格都有按钮组件。当mouseClicked事件被指示时,我想获取行和列的索引。我知道如何手动操作: 但我的问题是:15x15网格窗格。声明每个按钮并为每个组件复制相同的代码是无效的。有人知道怎么做吗? //============================================
我有一个学校项目或类似的东西,我试图为用户制作一个注册面板。当用户点击注册时,这个面板会打开。它看起来像这样。 我想做的是禁用创建按钮,只有在对话框上有3个检查时才会启用。 我在对话框上使用GridPane,我在考虑返回这些单元格上的某些节点(检查是图像视图),并检查条件是否为真。然而,我不知道如何从GridPane返回节点。如果你有其他方法来解决这个问题,也没关系。 这是代码的相关部分。
我正在创建一个应用程序,在一个gridPane的每个单元格内随机显示圆形(不同颜色)。 我想做的是创建一个“shuffle”按钮,在gridPane中随机改变每个圆的位置。然而,我不断遇到一大堆问题。 这是我到目前为止所拥有的。我的两个类(没有添加XML文件): 控制器类 主类
问题内容: 目标:从所有行内的定位标记中提取文本并将其放入csv中。 我正在尝试以下代码: 它工作正常,但csv中的每个单元格仅包含一个字符。 像这样: 代替: 我当然想念什么。但是呢 问题答案: 接受一个序列。您只给它一个字符串,因此将其视为一个序列,字符串的作用类似于字符序列。 您还要在此行中还有什么?没有?如果是这样,请使其成为一项的列表: (顺便说一句,由于您已经加入了Unicode分隔符