2013-06-14 5 views
0

Я пытаюсь добавить слайдер на моей странице, как индикатор выполнения. Но мой код работает некорректно.Как настроить индикатор выполнения и индикатор выполнения javaFx?

Моя задача - когда я собираюсь что-то скопировать из одного места в другое, я хочу отобразить индикатор выполнения на моей странице.
Так в javaFx я написал следующую задачу, но она не работает. Этот код работает, но я хочу показать работу в процентах, как 30%, 50% и «закончить». Но мой код не дает мне требования, поэтому, пожалуйста, помогите мне.

Мой код:

1.Declaration в прогресс бар и индикатор прогресса

@FXML 
final ProgressBar progressBar = new ProgressBar(); 
@FXML 
final ProgressIndicator progressIndicator = new ProgressIndicator(); 

2.Assign значения при нажатии на кнопку копирования.

@FXML 
private void handleOnClickButtonAction(MouseEvent event) { 
    if (fromLabel.getText().isEmpty() 
      || toLabel.getText().isEmpty() 
      || fromLabel.getText().equalsIgnoreCase("No Directory Selected") 
      || toLabel.getText().equalsIgnoreCase("No Directory Selected")) { 
     // Nothing 
    } else { 
     progressBar.setProgress(0.1f); 
     progressIndicator.setProgress(progressBar.getProgress()); 
     this.directoryCount.setText("Please Wait !!!"); 
    } 
} 

Этот код показывает мне только завершение 10% затем непосредственно показывает «сделано», но я хочу весь процесс в процентах, как 10,20,30, .. и т.д., а затем «сделано».


Мой код копии:

double i = 1; 
while (rst.next()) { 
    File srcDirFile = new File(fromLabel.getText() + "/" + rst.getString("nugget_media_files")); 
    File dstDirFile = new File(toLabel.getText() + "/" + rst.getString("nugget_media_files")); 
    File dstDir = new File(toLabel.getText() + "/" + rst.getString("nugget_directory")); 
    if (srcDirFile.lastModified() > dstDirFile.lastModified() 
      || srcDirFile.length() != dstDirFile.length()) { 
     copyDirectory(srcDirFile, dstDirFile, dstDir); 
    } 

    this.currentNuggetCount = i/this.nuggetFolderSize; 

    System.out.println("Nugget Count : " + this.currentNuggetCount); 

    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      progressBar.setProgress(1.0f); 
      progressIndicator.setProgress(progressBar.getProgress()); 
     } 
    }); 

    ++i; 
} 

Это copyDirectory метод:

private static void copyDirectory(File srcDir, File dstDir,File destNugget) { 
    System.out.println(srcDir+" >> "+dstDir); 
    if(!destNugget.exists()) { 
     destNugget.mkdirs(); 
    } 

    if (srcDir.isDirectory()) { 
     if (!dstDir.exists()) { 
      dstDir.mkdirs(); 
     } 

     String[] children = srcDir.list(); 
     for (int i=0; i<children.length; i++) { 
      copyDirectory(new File(srcDir, children[i]), 
          new File(dstDir, children[i]), 
          destNugget); 
     } 
    } else { 
     InputStream in = null; 
     try { 
      in = new FileInputStream(srcDir); 
      OutputStream out = new FileOutputStream(dstDir); 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
      } 
      in.close(); 
      out.close(); 
     } catch (IOException ex) { 
      System.out.println("Exceptio "+ex); 
     } finally { 
      try { 
       in.close(); 
      } catch (IOException ex) { 
       System.out.println("Exceptio "+ex); 
      } 
     } 
    } 
} 
+0

вы должны обновить 'ProgressBar' из процедуры копирования. Какой код вы используете для копирования? –

ответ

0

Вы должны ввести свой код внутри задачи и установить в методе UpdateProgress. Перед запуском задачи вам необходимо установить progressBar.progressProperty(). Bind (task.progressProperty());

Это пример: TaskTest

0

Попробуйте этот код. Это даст вам индикатор выполнения с индикатором прогресса, который зависит от управления ползунком.

public class Main extends Application { 

    @Override 
    public void start(Stage stage) { 
     Group root = new Group(); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.setTitle("Progress Controls"); 

     final Slider slider = new Slider(); 
     slider.setMin(0); 
     slider.setMax(50); 

     final ProgressBar pb = new ProgressBar(0); 
     final ProgressIndicator pi = new ProgressIndicator(0); 

     slider.valueProperty().addListener(new ChangeListener<Number>() { 
      public void changed(ObservableValue<? extends Number> ov, 
       Number old_val, Number new_val) { 
       pb.setProgress(new_val.doubleValue()/50); 
       pi.setProgress(new_val.doubleValue()/50); 
      } 
     }); 

     final HBox hb = new HBox(); 
     hb.setSpacing(5); 
     hb.setAlignment(Pos.CENTER); 
     hb.getChildren().addAll(slider, pb, pi); 
     scene.setRoot(hb); 
     stage.show(); 
    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 
Смежные вопросы