JavaFX:TableCell中的ProgressIndicator - 不确定模式下的图标大小+标签放置

时间:2016-06-28 00:49:18

标签: javafx

我目前正在使用带有标签的进度条(pb)在自定义单元工厂中显示%,但我喜欢实现ProgressIndicator(pi)以节省空间。

标准实施效果不佳 - 请参阅https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/img/progress-samples.png

  1. 当pi处于不确定模式时,旋转图标会变大并且行会调整大小 - 是否可以控制大小并使其适合TableView的默认行大小?
  2. pi提出了一个%(和100%时为“Done”)标签,但它显示在pi下面 - 它可以在右侧移动(并垂直对齐)吗?
  3. 请参阅我今天使用的代码以供参考:

        progressCln.setCellValueFactory( new PropertyValueFactory<>( "selected" ) ); 
        progressCln.setCellFactory(column -> new TableCell<Segment, Boolean>() {
    
            @Override
            protected void updateItem(Boolean selected, boolean empty) {
                super.updateItem(selected, empty);
                Segment seg = (Segment) getTableRow().getItem();
                if (empty || !selected) {
                    setGraphic(null);
                    setText(null);
                    if (seg!=null) seg.setProgress(0);
                } else if (seg != null )  { // for some reasons, seg got null
    
                    StackPane sp = new StackPane();
                    Label lb = new Label();
                    ProgressBar bar = new ProgressBar();
    
                    sp.getChildren().addAll(lb, bar);
                    bar.progressProperty().unbind();
                    bar.progressProperty().bind(seg.progressBarProperty());
    
                    //show % only when uploading
                    lb.textProperty().bind(
                            new When (bar.progressProperty().greaterThan(0))
                                    .then(bar.progressProperty().multiply(100).asString("%.0f%%"))
                                    .otherwise(""));
                    lb.setGraphic(bar);
                    setGraphic(sp);
                    lb.setContentDisplay(ContentDisplay.CENTER);
                    lb.setStyle("-fx-font-weight: bold; -fx-font-size: 8pt;");
                }
            }
        });
    

1 个答案:

答案 0 :(得分:0)

  1. 您可以通过设置首选宽度和高度强制大小:

    final ProgressIndicator指标=新的ProgressIndicator(); indicator.setPrefSize(50,50); 这样,指标在两种模式下保持相同的界限。

  2. 除了你展示的方式,我没有看到任何其他方式。您可以使用此处ProgressIndicator中记录的CSS类FragmentManager fragmentManager = getSupportFragmentManager(); AKDialogFragment newFragment = new AKDialogFragment(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); transaction.add(android.R.id.content, newFragment).addToBackStack(null).commit(); 访问指标内的文本。但这只允许造型。布局由percentage类(l.423)管理。

  3. 还要考虑将自定义进度指示器抽象为自己的小部件。