Как я могу складывать панели загрузки по вертикали, используя JavaFX? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть метод, который возвращает панель, и на этой панели есть несколько кнопок и индикатор ProgressBar, используемый для отображения хода ожидающей загрузки, позволяя пользователю приостановить, возобновить или отменить его:

screenshot of the download manager with one pane showing progress along with pause, resume, cancel controls for managing the download

Моя проблема в том, что когда я начинаю новую загрузку, я хочу добавить новую панель ниже последней, располагая их вертикально по мере начала новых загрузок.Однако созданная мной логика открывает новую панель в том же положении, что и предыдущая, с наложением ее.

Как мне сделать так, чтобы эти панели складывались?

Что я пробовал

package DownloadManager;

import java.io.File;
import java.util.ArrayList;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class ProgressClass {

    public Pane show( DownloadAction ob,Button pause,Button resume,Button delete,Thread thread) 
    {


        File resumefile = new File("C:\\Users\\kamran ali\\Desktop\\play.png");
        File pausefile = new File("C:\\Users\\kamran ali\\Desktop\\pause1.png");
        File deletefile = new File("C:\\Users\\kamran ali\\Desktop\\delete1.png");


        Image resIcon = new Image(resumefile.toURI().toString());
        Image paseIcon = new Image(pausefile.toURI().toString());
        Image delIcon = new Image(deletefile.toURI().toString());



        ImageView icon0 = new ImageView(resIcon);
        ImageView icon1 = new ImageView(paseIcon);
        ImageView icon2 = new ImageView(delIcon);
        icon0.setFitWidth(10);
        icon0.setFitHeight(10);
        icon1.setFitWidth(10);
        icon1.setFitHeight(10);

        icon2.setFitWidth(10);
        icon2.setFitHeight(10);


         pause  = new Button(null,icon1);
         resume  = new Button(null,icon0);
         delete= new Button(null,icon2);

        pause.setLayoutX(270);
        resume.setLayoutX(300);
        delete.setLayoutX(330);

        pause.setLayoutY(120);
        resume.setLayoutY(120);
        delete.setLayoutY(120);

        pause.setOnAction(e->{
            thread.suspend();
        });

        resume.setOnAction(e->{
            thread.resume();
        });

        ProgressBar pb = new ProgressBar(0.0);
        ProgressIndicator pi = new ProgressIndicator(0.0);
        Label label = new Label();
        label.setLayoutX(100);
        label.setLayoutY(80);
        label.setText(ob.getpath());
        pi.setLayoutX(510);
        pi.setLayoutY(80);
        pi.setPrefSize(50, 50);
        pb.setLayoutX(100);
        pb.setLayoutY(100);
        pb.setPrefWidth(400);
        pb.setProgress(0);
        pb.isIndeterminate();
        pb.progressProperty().unbind();
    pi.progressProperty().bind(ob.progressProperty());
        pb.progressProperty().bind(ob.progressProperty());
        Pane pane1 = new Pane();
    pane1.setLayoutY(40);
        pane1.getChildren().addAll(pb,pi,label,pause,resume,delete);
    return pane1;
    }



}

1 Ответ

0 голосов
/ 15 декабря 2018

Код, показанный в данный момент, описывает только то, как создаются ваши «панели», а не они выровнены / помещены в родительский контейнер / окно.

Вы используете absolute позиционирование элементов вашей ProgressClass - панели, я полагаю, вы делаете то же самое "снаружи".

Исправлено: вместо этого используйте контейнер макета.

В вашей внешней Windows, которая содержит другие элементы, добавьте javafx.scene.layout.VBox вместо прямого добавления созданного ProgressClass.

Каждый раз, когда вы добавляете еще один ProgressClass -экземпляр, добавьте его к javafx.scene.layout.VBox как дочерний элемент - он автоматически сложит ваши отдельные экземпляры ProgressClass es по вертикали .


Возможно, вы не захотите посещать некоторые учебники по макетированию, чтобы попрактиковаться в использовании Layout-контейнеров, которые более эффективны, чем размещение каждого элемента самостоятельно.

См. Fe: это официальное руководство и VBox () (J8)

...