2014-04-01 109 views
3

我在我的javaFX项目中使用了Slider,并且我有一个Label,当我移动滑块时它会更新。在拖动滑块时更新标签

我想Label更新,而我拖动Slider,而不仅仅是当拖放时。

这是我的代码:

betSlider.valueChangingProperty().addListener(new ChangeListener<Boolean>() { 
      @Override 
      public void changed(ObservableValue<? extends Boolean> source, Boolean oldValue, Boolean newValue) { 
       betLabel.textProperty().setValue(String.valueOf((int)betSlider.getValue())); 
    } }); 

回答

6

你只需要改变valueChangingProperty()valueProperty()和多田,只要你想它的作品!

一个小样本,这里附:

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.Slider; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Demo extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     // Add a scene 
     VBox root = new VBox(); 
     Scene scene = new Scene(root, 500, 200); 

     final Label betLabel = new Label("sdsd"); 

     final Slider betSlider = new Slider(); 
     betSlider.valueProperty().addListener(new ChangeListener() { 

      @Override 
      public void changed(ObservableValue arg0, Object arg1, Object arg2) { 
       betLabel.textProperty().setValue(
         String.valueOf((int) betSlider.getValue())); 

      } 
     }); 

     root.getChildren().addAll(betSlider, betLabel); 
     betLabel.textProperty().setValue("abc"); 

     // show the stage 
     primaryStage.setTitle("Demo"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

绑定标签的textProperty于滑块的valueProperty。

在绑定中需要格式转换才能使其工作。

Itachi的valueProperty()ChangeListener或绑定将工作。

11

import javafx.application.Application; 
import javafx.beans.binding.Bindings; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Slide extends Application { 
    @Override public void start(Stage stage) { 
     Label label = new Label(); 
     Slider slider = new Slider(1, 11, 5); 

     label.textProperty().bind(
      Bindings.format(
       "%.2f", 
       slider.valueProperty() 
      ) 
     ); 

     VBox layout = new VBox(10, label, slider); 
     layout.setStyle("-fx-padding: 10px; -fx-alignment: baseline-right"); 

     stage.setScene(new Scene(layout)); 
     stage.setTitle("Goes to"); 
     stage.show(); 
    } 

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

如果要完全在FXML做,你可以这样做:

<TextField prefWidth="50" text="${speedSlider.value}"/> 
<Slider fx:id="speedSlider" orientation="HORIZONTAL" prefWidth="300" 
     min="60" max="100000" blockIncrement="100"/> 
0

如果您在JavaFX的8滑块,你可以这样做:

slider().addListener(e -> { 
    // Your code here could be anything. 
});