2015-06-09 84 views
0

我有一個簡單的vbox,其中有六個hboxes,我可以刪除一個/ all並再次添加。刪除元素後如何重新生成索引

我的代碼:

@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)I刪除第四元件 - 工作正常 - 現在總5個元素
2)I刪除第三元件 - 工作正常 - 現在共有4個元素
3)現在,如果我想刪除第6個元素給我的indexOutOfBoutnd是預期的。

那麼如何重新生成或刷新索引。

謝謝,

+0

在第3步,你從哪裏得到索引= 6,你在某處存儲索引還是硬編碼? –

+0

我不存儲索引,但我有一個變量,它給了我indexex --->「cnt」。 – php83

+0

爲什麼這個變量在索引= 6的時候還剩下4個項目? –

回答

0

你是什麼意思與「刷新」指標?孩子們在一個ObservableList中。如果您刪除某個項目,則索引會更改。

實施例:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 

     HBox root = new HBox(); 

     Label label1 = new Label("Label1"); 
     Label label2 = new Label("Label2"); 
     Label label3 = new Label("Label3"); 

     root.getChildren().addAll(label1, label2, label3); 

     System.out.println("Original:"); 

     System.out.println(label1.getText() + ": " + root.getChildren().indexOf(label1)); 
     System.out.println(label2.getText() + ": " + root.getChildren().indexOf(label2)); 
     System.out.println(label3.getText() + ": " + root.getChildren().indexOf(label3)); 


     root.getChildren().remove(label2); 

     System.out.println("Modified:"); 

     System.out.println(label1.getText() + ": " + root.getChildren().indexOf(label1)); 
     System.out.println(label2.getText() + ": " + root.getChildren().indexOf(label2)); 
     System.out.println(label3.getText() + ": " + root.getChildren().indexOf(label3)); 


     Scene scene = new Scene(root, 800, 600); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

的第二項被移除時,如預期的控制檯輸出:

Original: 
Label1: 0 
Label2: 1 
Label3: 2 

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

根據文檔約indexOf

返回的索引 此列表中第一次出現指定元素,如果此列表爲-1 st不包含元素。

+0

您可以添加-1的解釋,否則可能會引起誤解。 –

+0

好的,添加了indexOf引用。 – Roland

相關問題