85 } 86 87 private void initialize() { 88 getStyleClass().setAll("label"); 89 setAccessibleRole(AccessibleRole.TEXT); 90 // Labels are not focus traversable, unlike most other UI Controls. 91 // focusTraversable is styleable through css. Calling setFocusTraversable 92 // makes it look to css like the user set the value and css will not 93 // override. Initializing focusTraversable by calling set on the 94 // CssMetaData ensures that css will be able to override the value. 95 ((StyleableProperty<Boolean>)(WritableValue<Boolean>)focusTraversableProperty()).applyStyle(null, Boolean.FALSE); 96 } 97 98 /*************************************************************************** 99 * * 100 * Properties * 101 * * 102 **************************************************************************/ 103 104 private ChangeListener<Boolean> mnemonicStateListener = (observable, oldValue, newValue) -> { 105 Label.this.impl_showMnemonicsProperty().setValue(newValue); 106 }; 107 108 /** 109 * A Label can act as a label for a different Control or 110 * Node. This is used for Mnemonics and Accelerator parsing. 111 * This allows setting of the target Node. 112 */ 113 public ObjectProperty<Node> labelForProperty() { 114 if (labelFor == null) { 115 labelFor = new ObjectPropertyBase<Node>() { 116 Node oldValue = null; 117 @Override protected void invalidated() { 118 if (oldValue != null) { 119 NodeHelper.getNodeAccessor().setLabeledBy(oldValue, null); 120 oldValue.impl_showMnemonicsProperty().removeListener(mnemonicStateListener); 121 } 122 final Node node = get(); 123 if (node != null) { 124 NodeHelper.getNodeAccessor().setLabeledBy(node, Label.this); 125 node.impl_showMnemonicsProperty().addListener(mnemonicStateListener); 126 impl_setShowMnemonics(node.impl_isShowMnemonics()); 127 } else { 128 impl_setShowMnemonics(false); 129 } 130 oldValue = node; 131 } 132 133 @Override public Object getBean() { 134 return Label.this; 135 } 136 137 @Override public String getName() { 138 return "labelFor"; 139 } 140 }; 141 142 } 143 return labelFor; 144 } 145 private ObjectProperty<Node> labelFor; 146 147 public final void setLabelFor(Node value) { labelForProperty().setValue(value); } 148 public final Node getLabelFor() { return labelFor == null ? null : labelFor.getValue(); } | 85 } 86 87 private void initialize() { 88 getStyleClass().setAll("label"); 89 setAccessibleRole(AccessibleRole.TEXT); 90 // Labels are not focus traversable, unlike most other UI Controls. 91 // focusTraversable is styleable through css. Calling setFocusTraversable 92 // makes it look to css like the user set the value and css will not 93 // override. Initializing focusTraversable by calling set on the 94 // CssMetaData ensures that css will be able to override the value. 95 ((StyleableProperty<Boolean>)(WritableValue<Boolean>)focusTraversableProperty()).applyStyle(null, Boolean.FALSE); 96 } 97 98 /*************************************************************************** 99 * * 100 * Properties * 101 * * 102 **************************************************************************/ 103 104 private ChangeListener<Boolean> mnemonicStateListener = (observable, oldValue, newValue) -> { 105 NodeHelper.showMnemonicsProperty(Label.this).setValue(newValue); 106 }; 107 108 /** 109 * A Label can act as a label for a different Control or 110 * Node. This is used for Mnemonics and Accelerator parsing. 111 * This allows setting of the target Node. 112 */ 113 public ObjectProperty<Node> labelForProperty() { 114 if (labelFor == null) { 115 labelFor = new ObjectPropertyBase<Node>() { 116 Node oldValue = null; 117 @Override protected void invalidated() { 118 if (oldValue != null) { 119 NodeHelper.getNodeAccessor().setLabeledBy(oldValue, null); 120 NodeHelper.showMnemonicsProperty(oldValue).removeListener(mnemonicStateListener); 121 } 122 final Node node = get(); 123 if (node != null) { 124 NodeHelper.getNodeAccessor().setLabeledBy(node, Label.this); 125 NodeHelper.showMnemonicsProperty(node).addListener(mnemonicStateListener); 126 NodeHelper.setShowMnemonics(Label.this, NodeHelper.isShowMnemonics(node)); 127 } else { 128 NodeHelper.setShowMnemonics(Label.this, false); 129 } 130 oldValue = node; 131 } 132 133 @Override public Object getBean() { 134 return Label.this; 135 } 136 137 @Override public String getName() { 138 return "labelFor"; 139 } 140 }; 141 142 } 143 return labelFor; 144 } 145 private ObjectProperty<Node> labelFor; 146 147 public final void setLabelFor(Node value) { labelForProperty().setValue(value); } 148 public final Node getLabelFor() { return labelFor == null ? null : labelFor.getValue(); } |