代码之家  ›  专栏  ›  技术社区  ›  Refactor

Javafx纽扣皮肤异常

  •  0
  • Refactor  · 技术社区  · 16 年前

    在下面的代码中,使用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
    }
    1 回复  |  直到 16 年前
        1
  •  0
  •   Matthew Hegarty Edwin Lunando    16 年前

    对于这个问题,我恐怕没有具体的答案,但是我知道1.2中的新控件有点问题,所以您看到这样的问题并不奇怪。

    如果您还没有这样做,我建议您在javafx jira站点的“运行时”部分下提出一个缺陷,网址为: http://javafx-jira.kenai.com/