JavaFx ProgressBar绑定SimpleDoubleProperty

时间:2013-08-14 18:01:53

标签: javafx-2 javafx

我在tableview中使用进度条,我在其属性上使用bind,以便在更改值时启动进度条:

private SimpleDoubleProperty progressBar;

    public Tabela(Double progressBar) {
    this.progressBar = new SimpleDoubleProperty(progressBar);
    }

        public Double getProgressBar() {
    return progressBar.get();
}

public DoubleProperty getProgressBarProperty() {
    return progressBar;
}

public void setProgressBar(Double progressBar) {
    this.progressBar.set(progressBar);
}

public void setProgressBar(SimpleDoubleProperty progressBar) {
    this.progressBar = progressBar;
}

在我的Hbox中使用进度条如下:

  final ProgressBar progress = new ProgressBar();
  progress.setMinWidth(324.0);
  progress.progressProperty().bind(tabela.getProgressBarProperty());

所以我使用的是在一定时间后值改变,即我将控制进度条。值已更改,但在我的tableview中没有任何反应,但当我将列位置更改为另一个时,进度条正在运行。

同样的情况发生在“标签”上,我改为“文字”而且它有效,但如果我必须使用进度条。

有办法强制'tableview'刷新吗?

2 个答案:

答案 0 :(得分:0)

当可观察对象发生更改时,您需要遵循JavaFX命名标准以使TableView和其他小部件正确刷新。例如,您应该将getProgressBarProperty()重命名为progressBarProperty()。

请参阅:How to update TableView Row using javaFx

答案 1 :(得分:0)

这个来源会有什么问题吗?

班级表

 ...

 public Tabela(String nome, Double progressBar, String etapa) {
    this.nome = nome;
    this.progressBar = new SimpleDoubleProperty(progressBar);
    this.etapa = new SimpleStringProperty(etapa);
}

....

添加新行。

      private void preencheListaNomeTabelas() {
      getLista().add(new Tabela("Test", 0.0, "Test Text"));

在表格中添加hbox。

columTabela.setCellValueFactory(new PropertyValueFactory<Tabela, String>("nome"));
    columSituacao.setCellFactory(new Callback<TableColumn<Tabela, Double>, TableCell<Tabela, Double>>() {
        public TableCell<Tabela, Double> call(TableColumn<Tabela, Double> p) {

            final HBox box = new HBox();
            box.setPrefHeight(25.0);

            final ProgressBar progressBar = new ProgressBar(-1);

            final Text text = new Text();
            **text.textProperty().bind(..); //I would use here the**

            BorderPane border = new BorderPane();
            border.setTop(text);
            border.setBottom(progressBar);
            BorderPane.setAlignment(text, Pos.CENTER);

            box.getChildren().add(border);

            final TableCell cell = new TableCell<Tabela, Double>() {
                @Override
                protected void updateItem(Double t, boolean bln) {
                    super.updateItem(t, bln);
                    if (bln) {
                        setText(null);
                        setGraphic(null);
                    } else {
                        progressBar.setProgress(t);
                        progressBar.prefWidthProperty().bind(this.widthProperty());
                        setGraphic(box);
                        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                    }
                }
            };

            cell.setAlignment(Pos.CENTER);
            return cell;
        }
    });
    columSituacao.setCellValueFactory(new PropertyValueFactory<Tabela, Double>("progress"));
    columSituacao.setText("Progresso");

    tableView.getItems().addAll(lista);
    tableView.getSelectionModel().selectFirst();

任务

    Task t = new Task() {

        @Override
        protected Object call() throws Exception {
            Thread.sleep(10000);
            getLista().get(0).setEtapa("Lendo PostgreSQL");
            getLista().get(0).setProgressBar(-1.0);
            return null;
        }

    };
    new Thread(t).start();