Skip to content

Instantly share code, notes, and snippets.

@carlos-silveira
Created March 29, 2019 05:39
Show Gist options
  • Save carlos-silveira/7bc6df8be11cb754d2b1562b00277151 to your computer and use it in GitHub Desktop.
Save carlos-silveira/7bc6df8be11cb754d2b1562b00277151 to your computer and use it in GitHub Desktop.
Thread and Progress bar Java FX
package sample;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
int litros;
double preciofinal;
public Label precio=new Label();
TextField txtlitros;
//tu tarea hacer
Task copyWorker;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Gasolinera");
Group root = new Group();
Scene scene = new Scene(root, 330, 120, Color.WHITE);
BorderPane mainPane = new BorderPane();
root.getChildren().add(mainPane);
final Label label = new Label("Gasolina cargada");
precio.setText("$");
final ProgressBar progressBar = new ProgressBar(0);
final HBox h1 = new HBox();
h1.setSpacing(5);
h1.setAlignment(Pos.CENTER);
h1.getChildren().addAll(precio);
mainPane.setTop(h1);
final HBox hb = new HBox();
hb.setSpacing(5);
hb.setAlignment(Pos.CENTER);
hb.getChildren().addAll(label, progressBar);
mainPane.setCenter(hb);
final Label litroslbl= new Label("Litros de gasolina:");
txtlitros= new TextField("");
final Button startButton = new Button("Start");
final Button cancelButton = new Button("Cancel");
final HBox hb2 = new HBox();
hb2.setSpacing(5);
hb2.setAlignment(Pos.CENTER);
hb2.getChildren().addAll(litroslbl,txtlitros,startButton, cancelButton);
mainPane.setBottom(hb2);
startButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
//limpias el diseño al empezar la acción del botón
startButton.setDisable(true);
progressBar.setProgress(0);
cancelButton.setDisable(false);
copyWorker = createWorker();
progressBar.progressProperty().unbind();
progressBar.progressProperty().bind(copyWorker.progressProperty());
copyWorker.messageProperty().addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
System.out.println(newValue);
}
});
new Thread(copyWorker).start();
preciofinal=Double.parseDouble(txtlitros.getText())*20;
precio.setText("$"+preciofinal);
}
});
cancelButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
startButton.setDisable(false);
cancelButton.setDisable(true);
copyWorker.cancel(true);
progressBar.progressProperty().unbind();
progressBar.setProgress(0);
System.out.println("cancelado");
}
});
primaryStage.setScene(scene);
primaryStage.show();
}
public Task createWorker() {
return new Task() {
@Override
protected Object call() throws Exception {
litros=Integer.parseInt(txtlitros.getText());
System.out.println("Litros:"+litros);
for (int i = 0; i < (litros/2); i++) {
Thread.sleep(1000);
// updateMessage("2000 milliseconds");
updateProgress(i + 1, litros/2);
System.out.println(i);
}
return true;
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment