在以下代码中,为什么在使用 ButtonSkin(来自 com.sun.javafx.scene.control.caspian)时最初没有显示按钮文本?
在以下代码中(运行 WinXP、NetBeans 6.7.1、JavaFX 1.2、JDK 1.6),使用 ButtonSkin 时,按钮文本以空白开头。使用滑块后,将显示按钮文本。
(来源:googlepages.com)
到
(来源:googlepages.com)
如果在移动滑块之前按下按钮,则会触发动作,打印“Some action slider 15.0 SliderInt 15”。这表明存在按钮文本的信息。然而按钮文本没有显示。
如果没有设置皮肤,也就是代码 skin: ButtonSkin { ... }
被注释掉了,启动时的结果是:
(来源:googlepages.com)
如果改为删除 中的绑定 text: sliderIntText
,问题也会消失。但是,按钮文本不再与滑块移动同步更新。
删除间接级别,即仅绑定到按钮文本中的 answerSlider.value 不会改变启动问题。
旁白:当滑块最小值不为 0 时,会出现一个已知的滑块值问题。我不想在这里解决这个问题。
package skinbutton;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.control.Button;
import com.sun.javafx.scene.control.caspian.*;
import javafx.scene.paint.Color;
import javafx.scene.control.Slider;
var answerSlider =
Slider {
min: 6
max: 32
value: 15
width: 100
translateX: 75
translateY: 20
};
var sliderIntValue:Integer = bind (java.lang.Math.floor(answerSlider.value)) as Integer ;
var sliderIntText = bind "SliderInt {%d sliderIntValue}";
var sceneSlider = Scene{
content: [
answerSlider,
Text {
font : Font {
size: 14
}
x: 75
y: 50
content: bind "Slider at {%4.1f answerSlider.value}"
}
Button {
translateX: 75
translateY: 60
skin: ButtonSkin {
fill: Color.LIGHTCORAL
textFill: Color.BLACK
}
text: bind sliderIntText
width: 95
font: Font.font("SansSerif", FontWeight.BOLD, 14)
action: function() {
println("Some action slider {%4.1f answerSlider.value} {sliderIntText}");
}
}
]
};
Stage {
title: "Button Skin Issue"
width: 250
height: 130
scene: sceneSlider
}