2017-03-01 7 views
1

スライダーの親指に数字を表示するスライダーがあります。スライダーをドラッグするたびに、数値が増減します。私は親指が倍精度の代わりに整数を表示するようにします。 "%の.1f" から "%d個" へJavaFXスライダーの親指の値

import javafx.application.Application; 
import javafx.geometry.*; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.Stage; 

public class SliderWithLabeledThumb extends Application { 
    public void start(Stage ps) { 
     Slider s = new Slider(); 

     StackPane root = new StackPane(s); 
     root.setPadding(new Insets(5)); 
     s.setOrientation(Orientation.VERTICAL); 
     s.setMin(49); 
     s.setMax(99); 
     s.setValue(51); 
     s.setMinorTickCount(0); 
     s.setMajorTickUnit(1); 

     Scene scene = new Scene(root); 

     s.applyCss(); 
     s.layout(); 
     Pane p = (Pane) s.lookup(".thumb"); 
     Label l = new Label(); 
     l.textProperty().bind(s.valueProperty().asString("%.1f").concat(" °")); 

     p.getChildren().add(l); 

     ps.setScene(scene); 
     ps.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

私はasStringの引数を(変更)、私は例外

l.textProperty().bind(s.valueProperty().asString("%d").concat(" °")); 

エラーメッセージを取得:

Exception in Application start method 
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.util.IllegalFormatConversionException: d != java.lang.Double 
    at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302) 
    at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2793) 
    at java.util.Formatter$FormatSpecifier.print(Formatter.java:2747) 
    at java.util.Formatter.format(Formatter.java:2520) 
    at java.util.Formatter.format(Formatter.java:2455) 
    at java.lang.String.format(String.java:2940) 
    at com.sun.javafx.binding.StringFormatter$4.computeValue(StringFormatter.java:196) 
    at javafx.beans.binding.StringBinding.get(StringBinding.java:152) 
    at com.sun.javafx.binding.StringFormatter.format(StringFormatter.java:207) 
    at javafx.beans.binding.Bindings.format(Bindings.java:4846) 
    at javafx.beans.binding.NumberExpressionBase.asString(NumberExpressionBase.java:319) 
    at embeddedwebview.SliderWithLabeledThumb.start(SliderWithLabeledThumb.java:29) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 

をここにCSSファイルがあります:

.slider .track { 
    -fx-pref-height: 10px; 
    -fx-pref-width: 20px; 
} 

.slider .thumb { 
    -fx-pref-height: 30; 
    -fx-prefer-width: 30; 
} 

現在の出力:

slider

+0

たぶん何か? http://stackoverflow.com/questions/38681664/javafx-slider-integer-onlyまたは、表示値はintとしてのみ表示されますが、実際の値はdoubleとして表示されますか? – Chris

+1

'%.0f'を使用するとどうなりますか? –

+0

あなたのcssにマイナーなタイプミスがあります: '-fx-prefer-width:30;' -fx-pref-width:30; ' – jewelsea

答えて

2

この質問はかなりの重複されて終わる:

だから、あなたが使用する必要があり、二重の値をフォーマットする%dを使用することはできません%f 。 double値の整数部分だけを表示したい場合は、%.0f(Hypnic Jerkのコメントで推奨されるように)に小数点以下をゼロに丸める(小数点は表示されません)ようにすることができます。 formatting javadocによれば、round half up algorithmが使用される。このような状況に似て

import javafx.application.Application; 
import javafx.geometry.*; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.Stage; 

public class SliderWithLabeledThumb extends Application { 
    public void start(Stage ps) { 
     Slider s = new Slider(); 

     StackPane root = new StackPane(s); 
     root.setPadding(new Insets(5)); 
     s.setOrientation(Orientation.VERTICAL); 
     s.setMin(49); 
     s.setMax(99); 
     s.setValue(51); 
     s.setMinorTickCount(0); 
     s.setMajorTickUnit(1); 

     Scene scene = new Scene(root); 

     s.applyCss(); 
     s.layout(); 
     Pane p = (Pane) s.lookup(".thumb"); 
     Label l = new Label(); 
     l.textProperty().bind(s.valueProperty().asString("%.0f").concat(" °")); 

     p.getChildren().add(l); 

     ps.setScene(scene); 
     ps.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

round

関連する問題