Присвойте новый статус передаваемого файла и добавьте его в jtable - PullRequest
0 голосов
/ 01 апреля 2012

Я должен сделать программу ftps для учебы.Я использую библиотеку ftp4j, потому что у меня не было достаточно времени, чтобы закончить свою программу вовремя.

Мой «ElementsTab» состоит из «Process», к которому я добавляю слушателей для получения статуса загруженного файла

Я создал код для добавления статуса в мою Jtable, но он не записывает новое значение ('En cours', 'Transféré' ...).Справедливо написать «En внимательный».

класс процесса

public class Process implements ftp4j.FTPDataTransferListener {

private List<PropertyChangeListener> liste = new ArrayList<PropertyChangeListener>();
File file;

    public Process(File file) {
        this.file = file;    
    }

    Process(int rowIndex, Object aValue) {
        this.file = (File) aValue;
    }


    public File getFile() {
        return file;
    }

    public String getFileName() {
        return file.getName();
    }

    public long getSize() {
        return file.length();        
    }

    public String getStatut(){
        if(status != null || !"En attente".equals(status)){
            return status;
        }else{
            return "En attente";
        }

    }

    //création de l'évènement
    public void setStatus(String pNewStatus){
    //appel à la méthode qui averti les différents listeners du changement de la variable.
    firePropertyChange(new PropertyChangeEvent(this, "status", status, pNewStatus));
    status = pNewStatus;
    }

    public String getSize(long bytes) {
        if (bytes > 1048576) {
            double div = bytes / 1048576;
            return div + " MB";
        } else if (bytes > 1024) {
            double div = bytes / 1024;
            return div + " KB";
        } else {
            return bytes + " bits";
        }
    }


private String status = "En attente";
@Override
public void started() {
    this.setStatus("En cours");
    System.out.println("parti!");

}

@Override
public void transferred(int length) {

}

@Override
public void completed() {
    this.setStatus("Transféré");
    System.out.println("fini!");
}

@Override
public void aborted() {
    this.setStatus("Annulé");
}

@Override
public void failed() {
    this.setStatus("Echoué");
}


 public void addPropertyChangeListener(PropertyChangeListener listener){
    liste.add(listener);
 }

 public void removePropertyChangeListener(PropertyChangeListener listener){
     liste.remove(listener);
 }

 //envoie l'évènement aux listeners
 private void firePropertyChange(PropertyChangeEvent propertyChangeEvent) {
    for ( PropertyChangeListener listener : liste){
        listener.propertyChange(propertyChangeEvent);
    }
 }

}

класс ElementsTab

public class ElementsTab extends AbstractTableModel implements PropertyChangeListener{

private static final ArrayList<Process> processList = new ArrayList<Process>();
private String[] columnNames;

            public ElementsTab() {

                    columnNames = new String[] {"Fichier", "Taille", "Progression","Status"};


            }

            public void addLigne(Process p){
                p.addPropertyChangeListener(this);
                processList.add(p);
                //Fire table row insertion notification to table.
                fireTableRowsInserted(getRowCount()-1,getRowCount()-1);

            }



@Override
            public int getColumnCount() {
                    return columnNames.length;
            }

@Override
            public int getRowCount() {
                    return processList.size();
            }

@Override
            public String getColumnName(int col) {
                    return columnNames[col];
            }

            public Process getElement(String e){
                if(processList.contains(e)){
                    return processList.get(processList.indexOf(e));
                }else{
                    return null;
                }
            }

            public void removed(int entier){
                processList.remove(entier).addPropertyChangeListener(this);
                fireTableDataChanged();
            }



  @Override
  public Object getValueAt(int rowIndex, int columnIndex) {
    try {
    Process p = processList.get(rowIndex);
    switch(columnIndex){
        case 0: //Filename
            return p.getFileName();
        case 1: //Size
            return p.getSize(p.getSize());
        case 2: //barre progression
            return "0";//new Integer(p.getBitsTranmis());
        case 3: //statut
            return p.getStatut();//"En attente";//p.getStatut(rowIndex);
        case 4:
            return p.getFile();
        }

    } catch(Exception e) {
        ///Exception occurs when user removes some rows and progress bar requesting old index.. Must catch this otherwise runtime error
        System.out.println(e);
    }
    return "";

  }

 @Override
 public void propertyChange(PropertyChangeEvent evt) {
     fireTableDataChanged();
     System.out.println("PropertyChangeEvent");

 }

}

button action

public static File[] files;
public ElementsTab e = new ElementsTab();
public Component frame = null;

private void jButtonPActionPerformed(java.awt.event.ActionEvent evt) {                                        
JFileChooser chooser = new JFileChooser();

// Enable multiple selections
chooser.setMultiSelectionEnabled(true);
chooser.setFileFilter(new ParcourirFiltre());
chooser.setAcceptAllFileFilterUsed(false);
chooser.setDialogTitle("Selection d'images");
// Show the dialog; wait until dialog is closed
chooser.showOpenDialog(this);


// Retrieve the selected files. This method returns empty
// if multiple-selection mode is not enabled.
files = chooser.getSelectedFiles();

     //ProgressRenderer pr = new  ProgressRenderer();
       for( int z = 0; z<files.length; ++z){

           if (!(files[z].length() > 5242880)){
               if(verif(files[z].getName())==true){
                  e.addLigne(new Process(files[z]));
               }

           }else{
               JOptionPane.showMessageDialog(frame, "Taille du fichier '" + files[z].getName() + "' supérieure à 5MB","Erreur fichier",JOptionPane.WARNING_MESSAGE);
           }
       }

       jTable1.setModel(e);
       jTable1.getColumnModel().getColumn(2).setCellRenderer(new  ProgressRenderer());

}

Публичное свойство void propertyChange (PropertyChangeEvent evt) моего ElementsTab никогда не вызывалось.Извините, если мой английский плохой.

Вопрос прост: я бы хотел, чтобы он добавил другой статус загружаемого файла

1 Ответ

0 голосов
/ 02 апреля 2012

исправлено удаление нового экземпляра процесса. Статус текущего процесса не изменяется, поскольку он не использует загруженный процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...