2013-08-14 3 views
0
값이 변경 될 때 있도록 진행 막대가 시작되고 나는 그의 재산 귀속을 사용 해요 tableview에,에 진행 막대를 사용하고

: 자바 FX의 ProgressBar 바인드 SimpleDoubleProperty

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에서 아무 일도 일어나지 않지만 열 위치를 다른 것으로 변경하면 진행 막대가 실행 중입니다.

"label"도 마찬가지입니다. "text"로 바뀌면 작동하지만 진행 표시 줄을 사용해야하는 경우입니다.

'tableview'새로 고침을 강제하는 방법이 있습니까?

답변

0

관찰 가능한 개체가 변경 될 때 TableViews 및 다른 위젯이 제대로 새로 고치게하려면 JavaFX 명명 표준을 따라야합니다. 예를 들어 getProgressBarProperty()를 progressBarProperty()로 바꿔야합니다.

은 참조 : How to update TableView Row using javaFx

+0

작업. setCellFactory를 사용하여 테이블 셀에 실제 ProgressBar 위젯을 표시하고 reflection을 사용하여 자동으로 progressBarProperty()에 바인드하여 setCellValueFactory (new PropertyValueFactory ("progressBar")) 값이 변경되면 다시 그릴 수 있습니다. – jhsheets

+0

예, 고맙습니다. 하지만 이제는 진행률 표시 줄 옆에 "텍스트"를 넣고 다른 "클래스"의 속성을 "바인딩"하지만 작동하지 않게합니다. 나는 당신이 더 잘 볼 수 있도록 코드를 게시했다 – Giovane

+0

그것이 작동하지 않는다고 말하는 것이 당신의 문제가 무엇인지 말해주지 않는다. Tabela 클래스에 progressBarProperty() 메서드가 있으면 셀 값 팩토리에서 columSituacao.setCellValueFactory (새 PropertyValueFactory ("progressBar"))를 설정해야합니다. progressProperty() 메소드의 이름을 변경하면 columSituacao.setCellValueFactory (새 PropertyValueFactory ("progress"))를 사용할 수 있습니다. 적절하게 바인딩 할 속성 이름의 철자를 지정해야합니다. – jhsheets

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