0

我在表格视图中使用进度条,我在他的属性上使用绑定,以便在更改值时启动进度条:

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());

所以我使用a,以便在一段时间后更改值,即我将控制进度条。该值已更改,但在我的表格视图中没有任何反应,但是当我将列位置更改为另一个时,进度条正在运行。

“标签”也是如此,我更改为“文本”并且它可以工作,但是如果我必须使用进度条。

有办法强制“tableview”刷新吗?

4

2 回答 2

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();
于 2013-08-16T11:54:44.280 回答
0

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

请参阅:如何使用 javaFx 更新 TableView Row

于 2013-08-15T23:26:18.467 回答