Ahojte, tak si zkouším vyrobit na kolekci( ArrayList ) listener(ListChangeListener) z JavaFX 2 ( vcelku užitečná funkce) pro vnitřní třídu. Přes anonymní třídu mi to funguje ale ta vnitřní mi dělá problémy. Zde je easy zdroják Napadá vás někoho jak ten problém obejít? Na zahraničních fórech to ještě nikdo neřešil a exampl na to není.
import java.util.*;
import javafx.beans.*;
import javafx.collections.*;
public class X01_KolekceObservableList {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String [] args){
List<String> seznam = new ArrayList<String>(); // vytvorime kolekci
ObservableList<String> obsList = FXCollections.observableList(seznam); // vytvorime objekt abtraktni kolekce a spojime jej s hlavni kolekci
seznam.add(new String("Info 1")); // pridame 1 prvek do seznamu
seznam.add(new String("Info 2")); // pridame 2 prvek do seznamu
seznam.add(new String("Info 3")); // pridame 3 prvek do seznamu
System.out.println("TEST ------------- START");
obsList.addListener(new UdalostObsKolekce()); // vnitrni trida - PROBLEM
obsList.addListener(new ListChangeListener() { // anonymni trida
public void onChanged(Change change) {
System.out.println("Detekuji Zmenu 1 "); } });
System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
System.out.println("TEST ------------- 1 ..... pridame prvek do seznamu");
seznam.add(new String("Info 4")); // pridame 4 prvek do seznamu
VypisKolekceSeznam(seznam);
System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
System.out.println("TEST ------------- 2 ..... pridame prvek do observer seznamu");
obsList.add(new String("Info 5")); // pridame 5 prvek do seznamu
VypisKolekceObsSeznam(obsList);
System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
System.out.println("TEST ------------- 3 ..... odebereme prvek ze seznamu");
seznam.remove(new String("Info 3"));
VypisKolekceObsSeznam(obsList);
System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
System.out.println("TEST ------------- 4");
System.out.println("TEST ------------- EXIT"); }
private static void VypisKolekceSeznam(List<String> kolekce){
int i=1;
for(Iterator<String> iter = kolekce.iterator(); iter.hasNext();){
System.out.println("Prvek "+(i++)+"\t"+iter.next()); } }
private static void VypisKolekceObsSeznam(ObservableList<String> obsList){
int i=1;
for(Iterator<String> iter = obsList.iterator(); iter.hasNext();){
System.out.println("Prvek "+(i++)+"\t"+iter.next()); } }
// NELZE VYTVORIT UDALOST JAKO VNITRNI TRIDA
class UdalostObsKolekce implements ListChangeListener<ObservableList<String>> {
public void onChanged( javafx.collections.ListChangeListener.Change<? extends ObservableList<String>> c) {
System.out.println("Detekuji Zmenu 2 "); }
}
class UdalostObsKol implements ListChangeListener<String> {
public void onChanged( javafx.collections.ListChangeListener.Change<? extends String> c) {
System.out.println("Detekuji Zmenu 3 "); }
}
}