O objeto ListChangeListener.Change é apenas para a list property, os quais referencia-se a list sendo observada. Esse objeto guarda muito mais informações sobre mudanças para a lista.
Isso representa uma ou mais mudanças discretas, cada qual pode ser elementos adicionados, elementos removidos, elementos recolocados ou elementos permutados.
A interface fornece métodos de mudanças para você consultar cada aspecto das mudanças.
Os métodos next() e reset() controla um cursor que interage direto a mudanças discretas. O cursor é posicionado antes da primeira mudança discreta quando o onChanged() é chamado.
Uma vez que o cursor é uma mudança discreta, os métodos wasAdded(), wasRemoved(), wasReplaced() e wasPermuted() diz a você qual o tipo de mudança discreta.
Uma vez conhecida a mudança discreta o cursor é posicionado, você pode chamar outros métodos para conseguir mais detalhes sobre a mudança discreta.
Para elementos adicionados, você pode conseguir índices do (inclusivo) ao (exclusivo), o addedSize e o addedSubList. Para elementos removidos, você pode pegar da origem a partir de índices que foram removidos, e a lista removida.
Para cada elemento recolocado, que pode ser pensado como uma remoção seguida por uma adição, a informação pertinente para ambas adição e remoção que deveriam ser examinadas.
Para elemento permutado, o método getPermutation (int i) mapeia o índice anterior para o índice posterior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
package main.java.br.com.cursojavanow; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; public class ListChangeEventExample { public static void main(String[] args) { ObservableList<String> strings = FXCollections.observableArrayList(); strings.addListener(new MyListener()); System.out.println("Calling addAll(\"Zero\"," + " \"One\", \"Two\", \"Three\"): "); strings.addAll("Zero", "One", "Two", "Three"); System.out.println("Calling" + " FXCollections.sort(strings): "); FXCollections.sort(strings); System.out.println("Calling set(1, \"Three_1\"): "); strings.set(1, "Three_1"); System.out.println("Calling setAll(\"One_1\"," + " \"Three_1\", \"Two_1\", \"Zero_1\"): "); strings.setAll("One_1", "Three_1", "Two_1", "Zero_1"); System.out.println("Calling removeAll(\"One_1\"," + " \"Two_1\", \"Zero_1\"): "); strings.removeAll("One_1", "Two_1", "Zero_1"); } private static class MyListener implements ListChangeListener<String> { @Override public void onChanged( Change<? extends String> change) { System.out.println("\tlist = " + change.getList()); System.out.println(prettyPrint(change)); } private String prettyPrint( Change<? extends String> change) { StringBuilder sb = new StringBuilder("\tChange event data:\n"); int i = 0; while (change.next()) { sb.append("\t\tcursor = ") .append(i++) .append("\n"); final String kind = change.wasPermutated() ? "permutated" : change.wasReplaced() ? "replaced" : change.wasRemoved() ? "removed" : change.wasAdded() ? "added" : "none"; sb.append("\t\tKind of change: ") .append(kind) .append("\n"); sb.append("\t\tAffected range: [") .append(change.getFrom()) .append(", ") .append(change.getTo()) .append("]\n"); if (kind.equals("added") || kind.equals("replaced")) { sb.append("\t\tAdded size: ") .append(change.getAddedSize()) .append("\n"); sb.append("\t\tAdded sublist: ") .append(change.getAddedSubList()) .append("\n"); } if (kind.equals("removed") || kind.equals("replaced")) { sb.append("\t\tRemoved size: ") .append(change.getRemovedSize()) .append("\n"); sb.append("\t\tRemoved: ") .append(change.getRemoved()) .append("\n"); } if (kind.equals("permutated")) { StringBuilder permutationSB = new StringBuilder("["); int from = change.getFrom(); int to = change.getTo(); for (int k = from; k < to; k++) { int permutation = change.getPermutation(k); permutationSB.append(k) .append("->") .append(permutation); if (k < change.getTo() - 1) { permutationSB.append(", "); } } permutationSB.append("]"); String permutation = permutationSB.toString(); sb.append("\t\tPermutation: ") .append(permutation).append("\n"); } } return sb.toString(); } } } |
Saída:
Calling addAll(“Zero”, “One”, “Two”, “Three”):
list = [Zero, One, Two, Three]
Change event data:
cursor = 0
Kind of change: added
Affected range: [0, 4]
Added size: 4
Added sublist: [Zero, One, Two, Three]
Calling FXCollections.sort(strings):
list = [One, Three, Two, Zero]
Change event data:
cursor = 0
Kind of change: permutated
Affected range: [0, 4]
Permutation: [0->3, 1->0, 2->2, 3->1]
Calling set(1, “Three_1”):
list = [One, Three_1, Two, Zero]
Change event data:
cursor = 0
Kind of change: replaced
Affected range: [1, 2]
Added size: 1
Added sublist: [Three_1]
Removed size: 1
Removed: [Three]
Calling setAll(“One_1”, “Three_1”, “Two_1”, “Zero_1”):
list = [One_1, Three_1, Two_1, Zero_1]
Change event data:
cursor = 0
Kind of change: replaced
Affected range: [0, 4]
Added size: 4
Added sublist: [One_1, Three_1, Two_1, Zero_1]
Removed size: 4
Removed: [One, Three_1, Two, Zero]
Calling removeAll(“One_1”, “Two_1”, “Zero_1”):
list = [Three_1]
Change event data:
cursor = 0
Kind of change: removed
Affected range: [0, 0]
Removed size: 1
Removed: [One_1]
cursor = 1
Kind of change: removed
Affected range: [1, 1]
Removed size: 2
Removed: [Two_1, Zero_1]
Fonte: The Definitive Guide to Modern Java Clients with JavaFX
Deixe um comentário