में श्रोता जोड़ें मेरे पास एक ऐरेलिस्ट है जिसे मैं गतिशील रूप से कुछ ऑब्जेक्ट्स जोड़ता हूं, और मेरे पास जेबटन है। मेरे प्रोग्राम को चलाते समय ArrayList खाली है और JButton सेट करने के लिए सेट है (झूठा)। जब भी ArrayList में 2 तत्व होते हैं या अधिक होते हैं तो मैं अपने बटन को सक्षम करना चाहता हूं और यदि ArrayList के पास एक आइटम या खाली है तो इसे फिर से अक्षम करें। इसे कैसे प्राप्त किया जा सकता है?ArrayList
उत्तर
ArrayList
अधिसूचना तंत्र किसी भी प्रकार का नहीं है।
मैं सुझाव है कि आप अपने खुद के List
कार्यान्वयन जो एक निजी ArrayList
इसके भंडारण के लिए प्रतिनिधियों बारे में है, लेकिन जावा के भीतर ही कुछ इसी तरह करने के लिए नोटिफिकेशन के लिए सुन ... या योग्यता प्रदान करती है। आप के लिए DefaultListModel
मई काम है, हालांकि यह List
ही लागू नहीं होता है।
आप क्योंकि @Jon स्कीट का कहना है के रूप में ArrayList अधिसूचना तंत्र किसी भी प्रकार का नहीं है ArrayList के साथ इस तरह बात नहीं कर सकते। आपको JGoodies को ObservableList
बाध्य करने का प्रयास करना चाहिए जो मदद कर सकता है।
या आप एक टाइमर है कि ArrayList के आकार के लिए जाँच करें और JButton तदनुसार बदल जाएगा सेट कर सकते हैं। कुछ समय अंतराल पर आपको निगरानी सूची के इस काम को करने के लिए धागे की आवश्यकता होगी।
या आप सब जगह है जहाँ आप जोड़ने/सूची से तत्वों को दूर तो सब उस जगह पर इस लॉगिन बारे में पता है।
यदि आप अपना खुद का List
कार्यान्वयन लिखते हैं, जैसे @ जोन स्कीट सुझाव देता है, तो आप इसे EventListenerList
दे सकते हैं। एपीआई प्रासंगिक तरीकों की रूपरेखा तैयार करता है।
@Jon स्कीट से पता चलता है कि आप भी कुछ ऐसा कर सकते हैं:
public class ListResponseModel<E> extends AbstractListModel {
private static final long serialVersionUID = 1L;
private ArrayList<E> delegate = new ArrayList<E>();
@Override
public int getSize() {
return delegate.size();
}
@Override
public Object getElementAt(int index) {
return delegate.get(index);
}
public void add(E e){
int index = delegate.size();
delegate.add(e);
fireIntervalAdded(this, index, index);
}
}
JavaFX (JRE 8 का हिस्सा) एक नमूदार सूची कार्यान्वयन प्रदान करता है। इस कोड मेरे लिए काम करता है:
ObservableList<MyAnno> lstAnno1 = FXCollections.observableList(new ArrayList<MyAnno>());
lstAnno1.addListener((ListChangeListener.Change<? extends MyAnno> c) -> {
c.next();
updateAnnotation((List<MyAnno>) c.getAddedSubList(), xyPlot);
});
...
lstAnno1.add(new MyAnno(lTs, dValue, strType));
...
public void updateAnnotation(List<MyAnno> lstMyAnno, XYPlot xyPlot) {
lstMyAnno.forEach(d -> {
...
});
}
यह बहुत अच्छा है। कोई नई कक्षा की आवश्यकता नहीं है। –
ObservableList<DynamicObjects> ol = FXCollections.ObservableArrayList(new ArrayList<DynamicObjects>());
ListProperty lp = new SimplePropertyList(ol);
lp.addListener(new ChangeListener(){
@Override public void changed(ObservableValue o, Object oldVal,
Object newVal){
if (ol.size() > 1 && !JButton.isEnabled()) {
JButton.setEnable(true);
} else if (ol.size < 2 && JButton.isEnabled()) {
JButton.setEnable(false);
}
});
बाद SimpleIntegerProperty वाक्य रचना मैं एक ArrayList जो आग जब आकार परिवर्तन किया है। जब से तुम प्रतिक्रिया करने के लिए जब आकार 2 है चाहता हूँ इस मामले में आप अब ArrayList के वर्तमान आकार की जरूरत है, तो यह करने के लिए एक सरल उपाय निम्नलिखित कार्य कर रही: में
ArrayListProperty.java
public class ArrayListProperty<E> extends ArrayList<E> implements ObservableValue<Number> {
private ExpressionHelper<Number> helper = null;
private SimpleIntegerProperty sizeProperty;
public ArrayListProperty(){
super();
sizeProperty = new SimpleIntegerProperty(0);
}
@Override
public boolean add(E e) {
boolean returnValue = super.add(e);
sizeProperty.set(size());
fireValueChangedEvent();
return returnValue;
}
@Override
public void add(int index, E element) {
super.add(index, element);
sizeProperty.set(size());
fireValueChangedEvent();
}
@Override
public E remove(int index) {
E returnValue = super.remove(index);
sizeProperty.set(size());
fireValueChangedEvent();
return returnValue;
}
@Override
public boolean remove(Object o) {
boolean returnValue = super.remove(o);
if(returnValue){
sizeProperty.set(size());
fireValueChangedEvent();
}
return returnValue;
}
protected void fireValueChangedEvent(){
ExpressionHelper.fireValueChangedEvent(helper);
}
@Override
public void addListener(ChangeListener<? super Number> listener) {
helper = ExpressionHelper.addListener(helper, sizeProperty, listener);
}
@Override
public void removeListener(ChangeListener<? super Number> listener) {
helper = ExpressionHelper.removeListener(helper, listener);
}
@Override
public Number getValue() {
return null;
}
@Override
public void addListener(InvalidationListener listener) {
helper = ExpressionHelper.addListener(helper, sizeProperty, listener);
}
@Override
public void removeListener(InvalidationListener listener) {
helper = ExpressionHelper.removeListener(helper, listener);
}
}
इस मामले नमूदार सरणी के आकार है, तब, जब आपके ArrayList घोषित करने के लिए, आप एक श्रोता जोड़ सकते हैं और कार्य कर सकते हैं जब आकार 2.
ArrayListProperty<Object> arrayList = new ArrayListProperty<>();
arrayList.addListener((ob, ov, nv) -> {
if(nv.intValue() == 2) doSomething();
});
इस कार्यान्वयन भी आप ChangeListener में एक तुलना जोड़ने की अनुमति देता है तो आप जान सकते हैं कि कुछ adde कब था डी या कुछ हटा दिया। इसके अलावा आप ऑब्जेक्ट को जोड़ा या हटा सकते हैं और इसे श्रोता में रख सकते हैं।
- 1. ArrayList
- 2. ArrayList
- 3. ArrayList
- 4. ArrayList
- 5. ArrayList
- 6. एक ArrayList
- 7. ArrayList प्रश्न
- 8. परिवर्तित ArrayList
- 9. जावा ArrayList
- 10. ArrayList पैरामीटर
- 11. जावा ArrayList
- 12. जावा ArrayList
- 13. जावा ArrayList
- 14. ArrayList Java
- 15. /deserialize ArrayList
- 16. ArrayList BinarySearch
- 17. प्रिंट ArrayList
- 18. ओओपी: ArrayList al = new ArrayList() और सूची अल = नया ArrayList() के बीच अंतर?
- 19. पॉलिमॉर्फिज्म: "ArrayList list = new ArrayList" के बजाय "सूची सूची = नया ArrayList" का उपयोग क्यों करें?
- 20. जावा सूची बनाम ArrayList
- 21. LinkedHashSet या ArrayList
- 22. संशोधित जावा ArrayList पर
- 23. जावा ArrayList.remove() ArrayList
- 24. ArrayList <URLConnection>
- 25. दिनांक की छंटनी ArrayList
- 26. हाइबरनेट -> ArrayList को
- 27. जावा सॉर्टिंग ऑब्जेक्ट ArrayList
- 28. एक ArrayList जावा
- 29. जावा: ArrayList को
- 30. Convert इटरेटर ArrayList को
समान: http://stackoverflow.com/questions/16529273/how-to-add-listener-on-arraylist-in-java –