当前位置: 首页 > 知识库问答 >
问题:

突出显示网格窗格列

微生阳平
2023-03-14

好的,所以我尝试在gridpane中垂直列中的任何节点上鼠标时高亮显示该列中的所有节点。现在,我正在获取节点的columnIndex,我的鼠标已结束,然后创建一个共享该列索引的所有节点的数组。将该数组返回到main方法,然后将数组中节点的背景色更改为一种颜色。

这是鼠标覆盖功能:

for (Node node : officeHoursGridPane.getChildren()) {
                node.setOnMouseEntered((MouseEvent t) -> {
                    node.setStyle("-fx-background-color:#f9f3c5;");
                    Node source = (Node)t.getSource();
                    Integer colIndex =     GridPane.getColumnIndex(source);
                    Integer rowIndex =     GridPane.getRowIndex(source);
                    //ystem.out.println("Column #: " + colIndex +     "\nRow #: " + rowIndex);                   
                    for(int c = 0; c <= colIndex; c++){
                        Node[] colNode = getNodeByColumnIndex(colIndex, officeHoursGridPane);
                        int colCount=0;
                        for(int v = 0; v <= colNode.length; v++){
                            Node vertNode = colNode[v];
                            vertNode.setStyle("-fx-background-color:#f9f3c5;");   
                        }                    
                    }                   
               });
                   node.setOnMouseExited((MouseEvent t) -> {
                      node.setStyle("-fx-background-color:#ffffff;");
                });          
            }

这是我的Node[]生成器:

    public Node[] getNodeByColumnIndex (final int column, GridPane gridPane) {
        Node[] result = null;
        ObservableList<Node> childrens = gridPane.getChildren();
        int count = 0;
        for (Node node : childrens) {
            if(GridPane.getColumnIndex(node) == column) {
                result[count] = node;
                count++;
                if(count > column){
                    break;
                }
            } 
        }

        return result;
    }

共有1个答案

高锦
2023-03-14

您应该在GridPane的子级中找到具有相同列索引的所有节点:

for (Node node : officeHoursGridPane.getChildren()) {
    node.setOnMouseEntered(e -> officeHoursGridPane.getChildren().forEach(c -> {
        Integer targetIndex = GridPane.getColumnIndex(node);
        if (GridPane.getColumnIndex(c) == targetIndex) {
            c.setStyle("-fx-background-color:#f9f3c5;");
        }
    }));
    node.setOnMouseExited(e -> officeHoursGridPane.getChildren().forEach(c -> {
        Integer targetIndex = GridPane.getColumnIndex(node);
        if (GridPane.getColumnIndex(c) == targetIndex) {
            c.setStyle("-fx-background-color:#ffffff;");
        }
    }));
}

注意,为了不突出显示额外的节点,您可能还应该检查行索引。

 类似资料:
  • 好吧,如上所述,我在我的javafx应用程序中有网格窗格,并且我试图获取它,以便当我将鼠标悬停在单个单元格上时,鼠标所在的单元格将变为黄色(认为excel有点东西)。我不知道如何做到这一点,然后在鼠标离开手机后重置它。 这就是我现在拥有它的方式,但它只是在鼠标悬停时改变一种颜色,然后保持该颜色。整个表格也不会更改每个单元格。有人帮忙吗?

  • 我想这可能是图像后的行和列的问题,但是我已经尝试了一些方法,但没有成功。非常感谢任何帮助。谢谢

  • 问题内容: 我有此代码从如何突出显示jtable中的多个单元格: 但是,当我用它突出显示一个单元格时,它会执行错误的操作,就像丢失整个数据一样。Iam是Java Swing的新手。请帮助使单元格在按钮按下动作事件中突出显示。 更新:添加我的示例代码: 我想要的是单击按钮,我只想突出显示单元格编号1(Row1-Column1)。 问题答案: 我使用此类来设置JTables的样式 创建此类的实例,并将

  • 谁知道是否可以更改文本突出显示? 当我在“”中编写sql时,突出显示效果很好,但是当我添加带有{}的新3.6语法时,除了python字符串之外的所有突出显示都会消失。 是否可以决定(在行级别应突出显示哪种语言? (我正在运行教授版PyCharm 2017.1.2)

  • 我正在创建一个包含图像和文本的网格视图布局。我想要多选的项目,这是工作正常,但我想突出显示的网格项目,这是选定的。 这是我的代码: 我应该添加什么到突出显示将被选中的网格项目的代码中。 请给我一些建议。提前谢谢。

  • 我正在创建一个应用程序,在一个gridPane的每个单元格内随机显示圆形(不同颜色)。 我想做的是创建一个“shuffle”按钮,在gridPane中随机改变每个圆的位置。然而,我不断遇到一大堆问题。 这是我到目前为止所拥有的。我的两个类(没有添加XML文件): 控制器类 主类