2016-04-11 36 views
0

Eksik dosya adlarını bir metin alanına görüntülemek istiyorum.JTextField'da for döngü içeriği nasıl saklanır ve görüntülenir?

JTextField için döngü içeriği nasıl saklanır ve gösterilir?

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JFileChooser; 
import javax.swing.JTextField; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 

public class CheckFiles extends JPanel { 

    public String FILENAME = "f:\\branch_report.txt"; 
    protected ArrayList listFromFile; 
    protected ArrayList listFromDir = new ArrayList(); 

    protected void getListFromFile() { 
     listFromFile = new ArrayList(); 
     BufferedReader is; 
     try { 
      is = new BufferedReader(new FileReader(FILENAME)); 
      String line; 
      while ((line = is.readLine()) != null) { 
       listFromFile.add(line); 
      } 
     } catch (FileNotFoundException e) { 
      System.err.println("Can't open file list file."); 
      return; 
     } catch (IOException e) { 
      System.err.println("Error reading file list"); 
      return; 
     } 
    } 

    public void getListFromDirectory() { 
     JFileChooser fileChooser = new JFileChooser(); 
     fileChooser.setCurrentDirectory(new File(System.getProperty("user.home"))); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     int result = fileChooser.showOpenDialog(this); 
     if (result == JFileChooser.APPROVE_OPTION) { 
      File selectedFile = fileChooser.getSelectedFile(); 
      System.out.println("Selected file: " + selectedFile.getAbsolutePath()); 
      listFromDir = new ArrayList(); 
      String[] l = new java.io.File(selectedFile.getAbsolutePath()).list(); 
      for (int i = 0; i < l.length; i++) { 
       listFromDir.add(l[i]); 
      } 
     } else { 
      JOptionPane.showMessageDialog(null, "No files selected"); 
     } 
    } 

    public void reportMissingFiles() { 
     for (int i = 0; i < listFromFile.size(); i++) { 
      if (!listFromDir.contains(listFromFile.get(i))) { 
       JOptionPane.showMessageDialog(null, listFromFile.get(i), "File not found", JOptionPane.ERROR_MESSAGE); // want to display the missing files in text field 
      } 
     } 
     JFrame frame = new JFrame("Files Not Found"); 
//frame.getContentPane().add(frame,"Center"); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
     JTextField text = new JTextField(); 
     text.getSelectedFile().getName(); 
     frame.add(text); 
     text.setVisible(true); 
//final JLabel label = new JLabel(); 
//frame.add(label); 
//label.setVisible(true); 
    } 

    public static void main(String[] argv) { 
     CheckFiles cf = new CheckFiles(); 
     System.out.println("CheckFiles starting."); 
     cf.getListFromFile(); 
     cf.getListFromDirectory(); 
     cf.reportMissingFiles(); 
     System.out.println("CheckFiles done."); 
    } 
} 
+0

* "Eksik dosya adlarını bir metin alanında görüntülemek istiyorum" * Bir liste halinde görüntülemek daha iyidir ['JList'] (https://docs.oracle.com/javase/tutorial/uiswing/components/list .html) veya ['JTable'] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html). [File Browser GUI] 'ye bakın (http: //codereview.stackexchange. com/q/4446/7784) bir ağaçta veya tabloda iyi (dosya) simgelerinin kullanımı içindir. –

+0

Mantıksal ve tutarlı bir girinti kod satırı ve blokları kullanın. Girinti, kod akışını takip etmeyi kolaylaştırmak için tasarlanmıştır! –

+0

'text.getSelectedFile(). GetName()' Bu kodun derlenmeyeceğini belirtmeliydin .. –

cevap

0

Sen uygulanması aşağıda ile reportMissingFiles() değiştirebilirsiniz: Ben eksik dosyaları ve bu SetJTextField için katma dize sürümünü içeren ürünlerin için Set<String> kullandık

public void reportMissingFiles() { 
     // Set for containing missing files. 
     Set<String> notFoundFileSet = new HashSet<>(); 
     for (int i = 0; i < listFromFile.size(); i++) { 
      if (!listFromDir.contains(listFromFile.get(i))) { 
       JOptionPane.showMessageDialog(null, listFromFile.get(i), 
         "File not found", JOptionPane.ERROR_MESSAGE); 
       // add missing files in set 
       notFoundFileSet.add(listFromFile.get(i).toString()); 
      } 
     } 
     JFrame frame = new JFrame("Files Not Found"); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
     JTextField text = new JTextField(); 
     // Stringify Set of missing file 
     text.setText(notFoundFileSet.toString()); 
     frame.add(text); 
     text.setVisible(true); 
    } 

. Dosya adlarını ihtiyacınıza göre biçimlendirmek için StringBuilder'u da kullanabilirsiniz.

Not: Daima örn yerine program tipi güvenli hale getirmek için ArrayList<String> listFromFile kullanılmış olmalıdır ArrayList listFromFile kullanmak yerine, kodunuzda Generics tercih ederim.

+0

ThanQ çok fazla. ama bunu değiştirmek aşağıdaki hatayı almam. –

+0

E: \> javac CheckFiles.java CheckFiles.java:57: türünün yasadışı başlangıcı Set notFoundFileSet = new HashSet <>(); ^ 1 hata –

+0

Sanırım Java7 kullanmıyor olabilirsiniz. setFoundFileSet = new HashSet (); ' –