次のコードで、ButtonSkin (com.sun.javafx.scene.control.caspian から) が使用されているときに、ボタンのテキストが最初に表示されないのはなぜですか?
次のコード (WinXP、NetBeans 6.7.1、JavaFX 1.2、JDK 1.6 を実行) では、ButtonSkin が使用されている場合、ボタンのテキストは空白で始まります。スライダーを使用すると、ボタンのテキストが表示されます。
(出典: googlepages.com )
から
(出典: googlepages.com )
スライダーを動かす前にボタンを押すと、アクションがトリガーされ、「いくつかのアクション スライダー 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
}