进度条(ProgressBar
)可视化JavaFX应用程序中的操作进度。
import javafx.application.Application
import javafx.scene.Group
import javafx.scene.Scene
import javafx.scene.control.ProgressBar
import javafx.stage.Stage
// create W w w . y I IB A I.C o m
public class Main extends Application {
@Override
public void start(Stage stage) {
Group root = new Group()
Scene scene = new Scene(root, 260, 80)
stage.setScene(scene)
Group g = new Group()
ProgressBar p2 = new ProgressBar()
g.getChildren().add(p2)
scene.setRoot(g)
stage.show()
}
public static void main(String[] args) {
launch(args)
}
}
上面的代码生成以下结果。
创建ProgressBar
以下代码显示如何通过传递progress
值来创建ProgressBar
。
ProgressBar pb = new ProgressBar(0.6)
还可以使用空构造函数创建没有参数的进度条。然后使用setProgress()
方法分配值。如果我们不能确定任务的完全完成时间,可以设置进度条在不确定模式,直到确定任务的长度。
以下代码显示如何创建一个完成25%
的进度条(ProgressBar
)。
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.layout.BorderPane
import javafx.scene.layout.HBox
import javafx.scene.paint.Color
import javafx.stage.Stage
// by W W w . yIIB aI.C O M
public class Main extends Application {
Task copyWorker
public static void main(String[] args) {
Application.launch(args)
}
@Override
public void start(Stage primaryStage) {
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("Files Transfer:")
final ProgressBar progressBar = new ProgressBar(0)
final HBox hb = new HBox()
hb.setSpacing(5)
hb.setAlignment(Pos.CENTER)
hb.getChildren().addAll(label, progressBar)
mainPane.setTop(hb)
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(startButton, cancelButton)
mainPane.setBottom(hb2)
startButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
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()
}
})
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("cancelled.")
}
})
primaryStage.setScene(scene)
primaryStage.show()
}
public Task createWorker() {
return new Task() {
@Override
protected Object call() throws Exception {
for (int i = 0 i < 10 i++) {
Thread.sleep(2000)
updateMessage("2000 milliseconds")
updateProgress(i + 1, 10)
}
return true
}
}
}
}
上面的代码生成以下结果。