- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解如何使用服务更新 JavaFX2.2 UI 中的一组文本字段,但文档中没有示例或提示。 Addressbook 和 Ensemble 示例都处理表格。该服务将返回一个 ObservableList 字符串。
如何进行绑定(bind)?
textField0 <---> observableList[0]
textField1 <---> observableList[1]
我修改了 ServiceSample(并发 | 服务示例位于 http://download.oracle.com/otndocs/products/javafx/2.2/samples/Ensemble/index.html )以具有 文本字段 ListView 但我不知道如何进行绑定(bind)。
我应该放什么而不是
tableView.itemsProperty().bind(service.valueProperty());
listView.itemsProperty().bind(service.valueProperty());
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); }
}
最佳答案
此答案演示了使用绑定(bind)从服务更新一组 JavaFX 2 文本字段。答案的基础是您问题中发布的原始示例代码。更新有效,因为 ListView (Strings) 的值类型现在与从服务返回的值的类型相匹配。
对您的原始代码进行以下修改:
改变:
ListView<TextField> listView = new ListView<TextField>();
ListView<String> listView = new ListView<String>();
// what to put here ? tableView.itemsProperty().bind(service.valueProperty());
listView.itemsProperty().bind(service.valueProperty());
import java.util.Random;
import javafx.application.Application;
import javafx.beans.value.*;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
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.*;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.util.Callback;
/**
* 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();
final Random random = new Random();
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<String> listView = new ListView<>();
listView.setEditable(true);
Button button = new Button("Refresh");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent t) {
service.restart();
}
});
listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
@Override public ListCell<String> call(ListView<String> param) {
return new InstantEditingCell();
}
});
listView.setPrefHeight(200);
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());
listView.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("A1: " + random.nextInt());
sales.add("A2: " + random.nextInt());
return sales;
}
}
@Override public void start(Stage primaryStage) throws Exception {
init(primaryStage);
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
class InstantEditingCell extends ListCell<String> {
@Override public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
final TextField textField = new TextField(getString());
textField.setMinWidth(this.getWidth() - this.getGraphicTextGap()* 2);
textField.focusedProperty().addListener(new ChangeListener<Boolean>(){
@Override public void changed(ObservableValue<? extends Boolean> value, Boolean wasFocused, Boolean isFocused) {
if (!isFocused) {
commitEdit(textField.getText());
}
}
});
setGraphic(textField);
}
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
class ClickableEditingCell extends ListCell<String> {
private TextField textField;
public ClickableEditingCell() {
}
@Override
public void startEdit() {
if (!isEmpty()) {
super.startEdit();
createTextField();
setText(null);
setGraphic(textField);
textField.selectAll();
}
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
setGraphic(null);
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
setGraphic(null);
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setMinWidth(this.getWidth() - this.getGraphicTextGap()* 2);
textField.focusedProperty().addListener(new ChangeListener<Boolean>(){
@Override public void changed(ObservableValue<? extends Boolean> arg0,
Boolean arg1, Boolean arg2) {
if (!arg2) {
commitEdit(textField.getText());
}
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
}
关于service - 如何从服务更新一组 JavaFX2.2 文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13163947/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!