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

单击JavaFX Listview中的任意位置将返回索引1并崩溃

阎懿轩
2023-03-14

我正在做一个简单的待办事项列表。直到现在一切都正常。我研究了几种保存数据的方法(根本没有UI工作),当我开始测试时,我注意到我的列表视图周围有一个蓝色的轮廓,点击一些东西会破坏程序<有两种情况:
1)运行程序-

这是它的图像

我得到的错误是:线程中的异常”JavaFX应用程序线程”java.lang.IndexOutOfBoundsException:长度为1的索引-1越界

 static void selectedIndexListener(ListView<Todo> listView) {
    listView.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            int selectedTodoIndex = listView.getSelectionModel().getSelectedIndex();
            StageController.launchSelectedTodoStage(TodoList.getTodoListInstance().getTodoAtIndex(selectedTodoIndex));
        }
    });
}

然后呢

 static Todo getTodoAtIndex(int index) {
    return todoList.get(index);
}

我有一个ObservableList,它保存了所有的待办事项,因此产生了错误。

我对java很熟悉,但我对javafx还不熟悉。我构建这个程序的原因是为了练习java,而不是太多的javafx。尽管如此,我不知道从哪里开始调试这个。我所能说的是,我所做的最后一件事就是编写函数来使用JSON保存和加载数据。最大的变化是,在运行程序时会填充列表视图,就像我以前运行它的地方一样,然后添加数据。然而,当我注释掉load和save方法(即像以前一样在没有初始数据的情况下运行程序)时,场景1(崩溃)就会发生。目前,我更关心的是第一种情况,而不是第二种情况

我很少在这里发帖,所以如果有什么需要我帮助的地方,请告诉我。

共有1个答案

杨高翰
2023-03-14

如果未选择任何内容,则

listView.getSelectionModel().getSelectedIndex()

将返回-1(参见文档)。因此,在未选择任何内容的情况下,您会得到一个ArrayIndexOutOfBoundsException。另一方面,如果您选择了某个项目,然后在空单元格中单击,则该选择不会更改,因此您可以获得以前所选项目的详细信息。

将鼠标点击与选择等同起来通常是个坏主意。虽然它们显然是相关的,但正如你所发现的,它们不是同一件事。

如果要处理鼠标在单元格上的单击,请使用单元格工厂定义已注册相应鼠标处理程序的单元格,而不是向ListView本身注册鼠标事件处理程序。比如:

listView.setCellFactory(lv -> {
    ListCell<Todo> cell = new ListCell<Todo>() {
        @Override
        protected void updateItem(Todo item, boolean empty) {
            super.updateItem(item, empty);
            setText(item == null ? "" : item.toString());
        }
    };
    cell.setOnMouseClicked(e -> {
        if (! cell.isEmpty()) {
            StageController.launchSelectedTodoStage(cell.getItem());
        }
    });
    return cell ;
});
 类似资料:
  • 我正在尝试在plotly中实现“单击任意位置”功能,以便在用户单击plotly图表的任意位置时获得坐标。当前的“官方”plotly功能仅在用户单击打印数据点时起作用,但我想注册单击,例如在背景白色画布上。 plotly中闪亮的点击事件可以做到这一点,但令人惊讶的是,plotly中似乎还不存在这种情况。 我做了一些研究,发现下面的代码笔实现非常接近:https://codepen.io/tim-lo

  • 我是r-plotly的新手,我正在试图弄清楚如何处理不在数据上的点击。似乎使用我可以从数据中获取点上的事件,但到目前为止,我还没有弄清楚如何对不接近数据但仅在绘图白色部分的单击执行此操作。 来自绘图的闪亮点击事件可以做到这一点,我只需要得到点击的x和y。我想要类似的,但情节要详细。 我是否可以将单击事件指定为来自plotly plot上的任意位置,而不仅仅是数据? 编辑:令人惊讶的是,这在plot

  • 我是Python的新手 我想在pandas数据帧中找到某个值的索引(比如说),因为这是列的起始位置。(列上方的行数未知,数据不相关,左侧的“列”为空。) 据我所知,isin方法只返回值是否存在的布尔值,而不是其索引。 如何找到该值的索引?

  • 问题内容: 这是很常见的事情,例如,如果您在此处单击stackoverflow上的收件箱。我会打电话给那个对话框或任何被打开的 东西 。 现在我知道有两种方法可以解决这个问题, 你创建一个无形的覆盖,但只有用户打开该元素具有更大的zIndex以及您关闭 的事情 上叠加通过点击 点击文档事件,而你检查在点击你是否点击你的事还是境外,在这种情况下,你闭上你 的事 。 无论哪种情况,我都希望使用添加/删

  • 当我在片段布局的任何地方单击转到主活动按钮时,单击,如何删除片段中的透明度。

  • 我从这里摘取了一些代码,允许通过单击行上的任何位置来选择JTree行。它在单行选择模式下工作良好。但是,我不确定如何修改它,以便处理多行选择。当用户进行多个选择(例如,在鼠标左键单击一行的同时按住shift或control按钮)时,我如何区分这种情况?