サービスを使用してJavaFX2.2UIのテキストフィールドのセットを更新する方法を理解しようとしていますが、ドキュメントにはこれに関するサンプルやヒントはありません。AddressbookとEnsembleの両方のサンプルはテーブルを扱います。サービスは文字列のObservableListを返します。どのようにバインディングを行いますか?
textField0 <---> observableList [0]
textField1 <---> observableList [1]
ServiceSample(同時実行|サービスサンプル(http://download.oracle.com/otndocs/products/javafx/2.2/samples/Ensemble/index.html))を変更して、TextFieldsのListViewを作成しましたが、その方法がわかりません。バインディング。代わりに何を置くべきか
tableView.itemsProperty().bind(service.valueProperty());
この行はコンパイルすらしません:
listView.itemsProperty().bind(service.valueProperty());
変更された並行性| http://download.oracle.com/otndocs/products/javafx/2.2/samples/Ensemble/index.htmlのサービスサンプル
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.util.Date;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
/**
* A sample showing use of a Service to retrieve data in a background thread.
* Selecting the Refresh button restarts the Service.
*
* @see javafx.collections.FXCollections
* @see javafx.concurrent.Service
* @see javafx.concurrent.Task
* @see javafx.scene.control.ProgressIndicator
* @see javafx.scene.control.TableColumn
* @see javafx.scene.control.TableView
*/
public class ServiceSample extends Application {
final GetDailySalesService service = new GetDailySalesService();
private void init(Stage primaryStage) {
Group root = new Group();
primaryStage.setScene(new Scene(root));
VBox vbox = new VBox(5);
vbox.setPadding(new Insets(12));
ListView<TextField> listView = new ListView<TextField>();
Button button = new Button("Refresh");
button.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
service.restart();
}
});
vbox.getChildren().addAll( listView, button);
Region veil = new Region();
veil.setStyle("-fx-background-color: rgba(0, 0, 0, 0.4)");
ProgressIndicator p = new ProgressIndicator();
p.setMaxSize(150, 150);
p.progressProperty().bind(service.progressProperty());
veil.visibleProperty().bind(service.runningProperty());
p.visibleProperty().bind(service.runningProperty());
// what to put here ? tableView.itemsProperty().bind(service.valueProperty());
StackPane stack = new StackPane();
stack.getChildren().addAll(vbox, veil, p);
root.getChildren().add(stack);
service.start();
}
/**
* A service for getting the DailySales data. This service exposes an
* ObservableList for convenience when using the service. This
* <code>results</code> list is final, though its contents are replaced when
* a service call successfully concludes.
*/
public class GetDailySalesService extends Service<ObservableList<String>> {
/**
* Create and return the task for fetching the data. Note that this
* method is called on the background thread (all other code in this
* application is on the JavaFX Application Thread!).
*
* @return A task
*/
@Override
protected Task createTask() {
return new GetDailySalesTask();
}
}
public class GetDailySalesTask extends Task<ObservableList<String>> {
@Override protected ObservableList<String> call() throws Exception {
for (int i = 0; i < 500; i++) {
updateProgress(i, 500);
Thread.sleep(5);
}
ObservableList<String> sales = FXCollections.observableArrayList();
sales.add(new String("A1"));
sales.add(new String("A2"));
return sales;
}
}
@Override public void start(Stage primaryStage) throws Exception {
init(primaryStage);
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
}