在下面的代码中,使用buttonskin(来自com.sun.javafx.scene.control.caspian)时,为什么不首先显示按钮文本?
在以下代码中(运行winxp、netbeans 6.7.1、javafx 1.2、jdk 1.6),使用buttonskin时,按钮文本以空白开始。使用滑块后,将显示TE按钮文本。
alt txt http://onecynic.googlepages.com/withButtonSkin.jpg
到
alt text http://onecynic.googlepages.com/withButtonSkinAfterAdjust.jpg
如果在移动滑块之前按下按钮,则会触发操作,打印“某些操作滑块15.0幻灯片打印15”。这表明按钮文本的信息存在。但是按钮文本没有显示。
如果皮肤没有固定,那就是代码
skin: ButtonSkin { ... }
在启动时,结果是:
alt txt http://onecynic.googlepages.com/withoutButtonSkin.jpg
如果改为移除
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
}