प्रारंभिक शुरू प्वाइंटJavaFX
मैं पास 1000 Person
वस्तुओं जो मैं किसी भी Person
वस्तुओं के भीतर संपत्ति हुए परिवर्तनों पर ध्यान करने के लिए एक Extractor
सम्मिलित करना चाहते हैं के एक मौजूदा List
(इस में ObservableList (UnsupportedOperationException) के तत्व को नहीं जोड़ सकता ObservableList
बाद में TableView
से जुड़ा होगा)।
तो मेरी कोड होगा जैसे:
ObservableList<Person> observablePersons = FXCollections.observableList(personlist,
personextractor);
त्रुटि संदेश
लेकिन जब मैं इस ObservableList को observablePersons जोड़ने के लिए एक नए व्यक्ति की वस्तुओं की कोशिश, मैं इस त्रुटि प्राप्त:
run:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at com.sun.javafx.collections.ObservableListWrapper.doAdd(ObservableListWrapper.java:101)
at javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:151)
at java.util.AbstractList.add(AbstractList.java:108)
at test.listchangelistener.listChangeDemo.main(listChangeDemo.java:72)
Java Result: 1
क्या आप कृपया मुझे बता सकते हैं कि मैं इस युग में क्यों आऊंगा आर संदेश? मेरे जावा संस्करण है jdk1.8.0_91 (32-बिट)
व्यक्ति कक्षा
package test.listchangelistener;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
class Person {
private final IntegerProperty age = new SimpleIntegerProperty();
private final StringProperty name = new SimpleStringProperty();
public Person(String name, Integer age) {
setName(name);
setAge(age);
}
public int getAge() {
return age.get();
}
public final void setAge(int value) {
age.set(value);
}
public IntegerProperty ageProperty() {
return age;
}
public String getName() {
return name.get();
}
public final void setName(String value) {
name.set(value);
}
public StringProperty nameProperty() {
return name;
}
@Override
public String toString() {
return "Person{" + "age=" + age.get() + ", name=" + name.get() + '}';
}
}
टेस्ट कोड
package test.listchangelistener;
import java.util.Arrays;
import java.util.List;
import javafx.beans.Observable;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.util.Callback;
public class listChangeDemo {
public static void main(String[] args) {
Person p1 = new Person("Ted", 26);
Person p2 = new Person("Anne", 19);
// just a simple list
List<Person> persons = Arrays.asList(p1, p2);
// extractor to observe change of person properties
Callback<Person, Observable[]> extractor = (Person p) -> {
return new Observable[]{
p.ageProperty(),
p.nameProperty()
};
};
// make list observable and attach extractor
ObservableList<Person> observablePersons = FXCollections.observableList(persons, extractor);
// create listchangeListener for observableList
ListChangeListener listener = (ListChangeListener) (ListChangeListener.Change c) -> {
while (c.next()) {
if (c.wasAdded()) {
System.out.println("these were added: ");
List addedSubList = c.getAddedSubList();
addedSubList.forEach((Object t) -> {
System.out.println("added Person: " + t);
});
} else if (c.wasRemoved()) {
System.out.println("these were removed");
List removedSubList = c.getRemoved();
removedSubList.forEach((Object t) -> {
System.out.println("removed Person: " + t);
});
} else if (c.wasUpdated()) {
System.out.println("these were updated");
System.out.println("Updated elements are: "
+ c.getList().subList(c.getFrom(), c.getTo()));
}
}
};
// attach listchangeListener to observableList
observablePersons.addListener(listener);
// testing changes
observablePersons.add(new Person("Siegfried", 10));
}
}
मुझे नहीं लगता कि इस सवाल का डुप्लिकेट के रूप में चिह्नित किया जाना चाहिए। जबकि अंतर्निहित समस्या एक जैसी होती है, हालात अलग-अलग होते हैं। मेरी राय में, इस मामले में देखने योग्य सूची के अतिरिक्त यह एक अद्वितीय सवाल बनाता है –