< prev index next >
modules/javafx.controls/src/main/java/javafx/scene/control/skin/LabeledSkinBase.java
Print this page
@@ -23,10 +23,11 @@
* questions.
*/
package javafx.scene.control.skin;
+import javafx.geometry.Point2D;
import com.sun.javafx.scene.control.LabeledText;
import com.sun.javafx.scene.control.behavior.TextBinding;
import com.sun.javafx.scene.control.skin.Utils;
import javafx.application.Platform;
import javafx.beans.InvalidationListener;
@@ -571,17 +572,17 @@
// TODO Baseline may not be handled correctly
// may have been CENTER, BASELINE, or null, treat as center
contentY = (y + ((h - contentHeight) / 2.0));
}
- double preMnemonicWidth = 0.0;
+ Point2D mnemonicPos = null;
double mnemonicWidth = 0.0;
double mnemonicHeight = 0.0;
if (containsMnemonic) {
final Font font = text.getFont();
String preSt = bindings.getText();
- preMnemonicWidth = Utils.computeTextWidth(font, preSt.substring(0, bindings.getMnemonicIndex()), 0);
+ mnemonicPos = Utils.computeMnemonicPosition(font, preSt, bindings.getMnemonicIndex(), this.wrapWidth, labeled.getLineSpacing());
mnemonicWidth = Utils.computeTextWidth(font, preSt.substring(bindings.getMnemonicIndex(), bindings.getMnemonicIndex() + 1), 0);
mnemonicHeight = Utils.computeTextHeight(font, "_", 0, text.getBoundsType());
}
@@ -610,26 +611,25 @@
// Since I only have to position the text, it goes at the
// contentX/contentY location. Note that positionNode will
// adjust the text based on the text's minX/minY so no need to
// worry about that here
text.relocate(snapPositionX(contentX), snapPositionY(contentY));
- if (containsMnemonic) {
+ if (containsMnemonic && (mnemonicPos != null)) {
mnemonic_underscore.setEndX(mnemonicWidth-2.0);
- mnemonic_underscore.relocate(contentX+preMnemonicWidth, contentY+mnemonicHeight-1);
+ mnemonic_underscore.relocate(contentX + mnemonicPos.getX(), contentY + mnemonicPos.getY());
}
} else if (ignoreText) {
// there isn't text to display, so we need to position it
// such that it doesn't affect the content area (although when
// there is a graphic, the text isn't even in the scene)
text.relocate(snapPositionX(contentX), snapPositionY(contentY));
graphic.relocate(snapPositionX(contentX), snapPositionY(contentY));
- if (containsMnemonic) {
+ if (containsMnemonic && (mnemonicPos != null)) {
mnemonic_underscore.setEndX(mnemonicWidth);
mnemonic_underscore.setStrokeWidth(mnemonicHeight/10.0);
- mnemonic_underscore.relocate(contentX+preMnemonicWidth, contentY+mnemonicHeight-1);
-
+ mnemonic_underscore.relocate(contentX + mnemonicPos.getX(), contentY + mnemonicPos.getY());
}
} else {
// There is both text and a graphic, so I need to position them
// relative to each other
double graphicX = 0;
@@ -668,14 +668,14 @@
textX = contentX + ((contentWidth - textWidth) / 2.0);
graphicY = contentY + ((contentHeight - graphicHeight) / 2.0);
textY = contentY + ((contentHeight - textHeight) / 2.0);
}
text.relocate(snapPositionX(textX), snapPositionY(textY));
- if (containsMnemonic) {
+ if (containsMnemonic && (mnemonicPos != null)) {
mnemonic_underscore.setEndX(mnemonicWidth);
mnemonic_underscore.setStrokeWidth(mnemonicHeight/10.0);
- mnemonic_underscore.relocate(snapPositionX(textX+preMnemonicWidth), snapPositionY(textY+mnemonicHeight-1));
+ mnemonic_underscore.relocate(textX + mnemonicPos.getX(), textY + mnemonicPos.getY());
}
graphic.relocate(snapPositionX(graphicX), snapPositionY(graphicY));
}
/**
< prev index next >