如何在删除元素后重新生成索引

时间:2015-06-09 14:11:12

标签: javafx refresh

我有一个简单的vbox,它将有六个hbox,我可以删除一个/所有并再次添加。

我的代码:

@FXML
private VBox userSelectedValues;

int index = userSelectedValues.getChildren().indexOf(event.getSource()); 

userSelectedValues.getChildren().remove(cnt);
ObservableList<Node> hboxNodes = FXCollections.observableArrayList();
hboxNodes.addAll(userSelectedValues.getChildren());
userSelectedValues.getChildren().clear();
userSelectedValues.getChildren().addAll(hboxNodes);

场景:最初有六个元素

1)我删除了第4个元素 - 工作正常 - 现在总共5个元素
2)我删除了第3个元素 - 工作正常 - 现在总共4个元素
3)现在,如果我想删除第6个元素,则会给我一个期望的indexOutOfBoutnd。

所以如何重新生成或刷新索引。

谢谢,

1 个答案:

答案 0 :(得分:0)

“刷新”索引是什么意思?孩子们在ObservableList中。如果删除项目,则索引会更改。

示例:

Original:
Label1: 0
Label2: 1
Label3: 2

Modified:
Label1: 0
Label2: -1
Label3: 1

第二项被删除,控制台输出符合预期:

div {
  margin: 50px;
  height: 50px;
  min-width: 100px;
  background: lightgray;
  position: relative;
  display: inline-block;
  border-top: 5px solid gold;
  border-bottom: 5px solid gold;
  padding-left: 30px;
  padding-right: 30px;
  line-height: 50px;
  cursor:pointer;
}
div:before,
div:after {
  content: "";
  position: absolute;
  top: -5px;
  height: 37px;
  width: 37px;
  background: inherit;
  transform: rotate(45deg);
  transform-origin: top left;
}
div:before {
  left: 0;
  border-left: 5px solid gold;
  border-bottom: 5px solid gold;
}
div:after {
  left: 100%;
  border-top: 5px solid gold;
  border-right: 5px solid gold;
}
/*demo only*/

html {background: #222;}

根据indexOf的文档:

  

返回指定元素第一次出现的索引   此列表,如果此列表不包含该元素,则返回-1。