2013-02-27 2 views
1

Listener을 통해 이러한 요소가 트리거되면 요소의 userData을 얻으려고합니다. 기본적으로 ObservableValue의 "소유자"에 대한 참조를 ChangeListener의 인스턴스로 가져옵니다. 수신기에서 userData에 액세스

내가이 더 나은 예를 통해 설명 될 수 있다고 생각 :

for(/*something*/) { 
    CheckBox newBox = new CheckBox("My Label " + i); 
    newBox.setSelected(true); 
    newBox.setUserData(object); //setting this object to access later 
    newBox.selectedProperty().addListener(new ChangeListener<Boolean>() { 
     public void changed(ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) { 
      //Here I would like to call something to get the UserData 
      //I have just set. I would need to access "object" set above. 
     } 
    }); 
} 

내가 그렇게 할 수있는 방법을 발견하지 않았습니다. 지금은이 체크 박스의 id을 설정할 수 있으며,이 ID를 사용하면 필요한 항목을 찾을 수 있습니다.하지만이 노드에 객체 (userData)를 설정할 수 있다는 사실에 반하는 것 같습니다. 이것은 userData을 사용하는 방법이 아닙니까?

답변

1

를 사용하여 키워드 final :

final CheckBox newBox = new CheckBox("My Label " + i); 

그런 다음 사용하여 액세스 : 여기

newBox.getUserData() 
+0

와우. 내 솔루션보다 훨씬 더 간단합니다 ... 나는 책으로 돌아가서 약간의 단계를 거쳐야한다고 생각합니다. 'final', 그게 내가 필요한 전부 야. 내가 간단하다고 생각했다. – blo0p3r

+0

예, 최종에 대해서는 조금 까다 롭습니다. 모든 책이 그런 경우에 적절한주의를 기울이는 것은 아닙니다. –

0

(나는 원래 수를 묻는 있었는지 가정) 나는이 문제에 대해있는 솔루션입니다.

이 기능을 구현 한 ChangeListener 구현을 만들었습니다. 이 Listener은 다음과 같습니다

public class ChangeListenerWithData implements ChangeListener<Boolean> { 

    private Object userData; 

    public ChangeListenerWithData(Node node) { 
     userData = node.getUserData(); 
    } 

    public Object getUserData() { 
     return userData; 
    } 

    public void setUserData(Object userData) { 
     this.userData = userData; 
    } 

    @Override 
    public void changed(ObservableValue<? extends Boolean> observable, 
      Boolean oldValue, Boolean newValue) { 
     // TODO Auto-generated method stub 

    } 

} 

내 코드는이되었다 :

for(/*something*/) { 
    CheckBox newBox = new CheckBox("My Label " + i); 
    newBox.setSelected(true); 
    newBox.setUserData(object); //setting this object to access later 
    newBox.selectedProperty().addListener(new ChangeListenerWithData(newBox) { 
     public void changed(ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) { 
      //accessing user data 
      context.getMyMap().get(this.getUserData().toString()); 
     } 
    }); 
} 

나는 항상 더 나은 솔루션 열려있어,하지만 그 동안,이뿐만 아니라 다른 사람을 도울 수 있기를 바랍니다!

0

나는 동일한 수신기를 사용하여 CheckBoxesTextFields, 모두의 배열을 가지고 있고, 나는 어떤 말 userData를 사용하는 :

cb.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(final ActionEvent event) { 
     final CheckBox source = (CheckBox) event.getSource(); 
     System.out.println(source.getUserData()); 
     } 
    }); 
관련 문제