2016-03-22 18 views
0

Bir JavaFX menüsüne dinamik olarak girişler eklemeye çalışıyorum. Grafik çizebilen bir programım var, her yeni bir grafik çizildiğinde, tüm grafiklerle bir ObservableList'a bir giriş ekliyorum.
Benim controller benim liste ve her değişiklik, JavaFX view içinde Menu değiştirmelidir. Ancak bunu yaparken bir sorunla karşılaşıyorum.
İlk eklentide, beklendiği gibi the first entry gösterir.
İkinci eklentide, liste the first entry + the first entry + the last entry içerir.
Üçüncü eklentide, first entry + the first entry + the second entry + the first entry + the second entry + the last entry gösterilmektedir. Kalıbı bu noktadan ileriye doğru tahmin edebilirsiniz.JavaFX'te Menü'ye dinamik girişler ekleme

graphHandler.getGraphs().addListener(new ListChangeListener<Graph>() { 
//GraphHandler.class is my model, that holds the list with all graphs 
    @Override 
    public void onChanged(Change<? extends Graph> c) { 
     Menu history = graphView.getHistoryMenu(); 
     history.getItems().removeAll(); 
     //on change get the Menu from the model and empty it 
     String changes = (String) c.toString(); 
     System.out.println(changes); 
     //Output will be added below snippet 
     graphHandler.getGraphs().forEach((Graph graph) -> { 
      String root = graph.getRootNode().toString(); 
      MenuItem item = new MenuItem(root); 
      //Get the graph's root node name and add a MenuItem with it's name 
      item.setOnAction(new EventHandler<ActionEvent>() { 
      //On choosing a MenuItem load the according graph; works fine 
       @Override 
       public void handle(ActionEvent event) { 
        graphHandler.getGraphByRootNode(root); 
       } 
      }); 
      history.getItems().addAll(item); 
      //Add all MenuItems to the Menu 
     }); 
    } 
}); 

Benim yaklaşımım o her değişikliği Menu boşaltmak ve doldurmak için, ama çalışmak için görünmüyor:
Bu kod parçacığı benim denetleyicisi alınır. Kaybettiğim bir fikri olan var mı?

{ [[email protected]] added at 0 } 
{ [[email protected]] added at 1 } 
{ [[email protected]] added at 2 } 

çıkış
görmeyi bekliyorum neyi gösterir. Ayrıca ObservableList'un size()'u beklediğim gibi.

cevap

1

Kaldırmak istediğiniz nesneleri iletmeniz gereken removeAll(E...) kullanıyorsunuz. Herhangi bir tartışmayı geçmediğiniz için hiçbir şey kaldırılmaz. Listeyi temizlemek için, geçmiş listenizdeki tüm öğeleri kaldıracak olan clear() kullanın.

+0

Bir kez argüman olarak "graphHandler.getGraphs()" geçmeye çalıştı, işe yaramadı. Çözüm için teşekkürler :) –