2016-09-26 3 views
2

私は、Labelコントロールのための内部コンテンツはありませんが、近くではなく、内部の基準制御setLabelForでラベル付けされたコンポーネントのLabelの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のようなコントロールでは、textPropertyForConnectedLabelのようなプロパティは見つからず、バインディングはの後にのみ(ラベル)になります。this.queryAccessibleAttribute(AccessibleAttribute.LABELED_BY)はnullになりません。

+0

そして、あなたは(https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Labeled.html [javadocの]正しいプロパティ名を調べることができませんでした#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; 
} 
関連する問題