2016-09-26 1 views
2

는 I 근처가 아니라 내부setLabelFor에 의해 레이블에 연결되는 구성 요소의 레이블 StringProperty (JavaFX)를 가져 오는 방법은 무엇입니까?

@Override 
public Control setLabel(Label label) { 
    label.setLabelFor(this); 
    return this; 
} 


@Override 
public Label getLabel() { 
    return (Label) this.queryAccessibleAttribute(AccessibleAttribute.LABELED_BY); 
} 

라벨 제어를위한 내부 만족하지 구현 제어하지만, 제어 기준이있다.

내가 setLabel을 호출하기 전에 일부 속성에서 향후 레이블의 텍스트를 바인딩해야합니다. 이 같은 것

someStringProperty.bind (control.labelTextProperty());

어떻게 하시겠습니까?

문제를 명확히하려고 노력하겠습니다.

레이블의 경우 labelForProperty() 속성이 있으므로 바인딩하기 전에 setLabelFor 메서드가 호출됩니다. 그러나 TextField와 같은 Control의 경우 textPropertyForConnectedLabel과 같은 속성을 찾을 수 없으며 바인딩은 이후에만 (this.queryAccessibleAttribute (AccessibleAttribute.LABELED_BY)가 null이 아님) 후에 만 ​​가능합니다.

+0

그리고 당신은 [javadoc 내에서] 올바른 속성 이름 (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Labeled.html를 찾아 볼 수 없었다 #textProperty) 또는 IDE의 자동 완성 기능에서 ??? – fabian

+0

흠 .. 어쩌면 나는 정확하게 질문을하지 않았다. setLabel을 호출하기 전에 queryAccessibleAttribute에 의한 getLabel은 null을 리턴합니다. – DmitriyAntonov

+1

질문을 명확히 해 주시겠습니까? 'setLabel'에서 바인딩을 수행하겠습니까? 이 경우 레이블은 매개 변수로 있습니다. 또는? 개인적으로 나는 우리가 어떤 질문에 대답해야하는지 정말로 이해하지 못한다 : – DVarga

답변

0

저는 조정 중개자 속성으로 해결했습니다.

private StringProperty textLabelProperty = new SimpleStringProperty(""); /** 
* 
*/ 
public Control setLabel(Label label) { 
    if (label != null) { 
     label.setLabelFor(this); 
     textLabelProperty.bind(label.textProperty()); 
    } 
    return this; 
}  

public StringProperty labelTextProperty() { 
    return textLabelProperty; 
} 
관련 문제