2016-04-11 9 views
0

不足しているファイル名をテキストフィールドに表示します。forループの内容をJTextFieldに保存して表示する方法はありますか?

JTextFieldにforループの内容を保存して表示する方法はありますか。

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

* "欠落しているファイル名をテキストフィールドに表示したい" *リスト['JList']に表示する方が良い(https://docs.oracle.com/javase/tutorial/uiswing/components/list .html)または['JTable'](https://docs.oracle.com/javase/tutorial/uiswing/components/table.html)を参照してください。[File Browser GUI](http://codereview.stackexchange。ツリー(ツリー)内の良い(ファイル)アイコンを使用するために使用されます(com/q/4446/7784)。 –

+0

インデントするコード行とブロックの論理的で一貫した形式を使用します。インデントは、コードの流れをより簡単にするためのものです。 –

+0

'text.getSelectedFile()。getName()'このコードはコンパイルされないと言わざるを得ない。 –

答えて

0

あなたは実装以下でreportMissingFiles()を置き換えることができます:私は行方不明のファイルとそのSetJTextFieldへの追加文字列バージョンをcontainigためSet<String>を使用している

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); 
    } 

StringBuilderを使用して、必要に応じてファイル名をフォーマットすることもできます。

注:は代わりに、常にArrayList listFromFileを使用しての、あなたのプログラムタイプを安全にするためにArrayList<String> listFromFileを使用している必要があります例えば、あなたのコードでGenericsを好みます。

+0

ThanQ非常に。以下のエラーが表示されます。 –

+0

E:\> javac CheckFiles.java CheckFiles.java:57:不正なタイプの開始 を設定します。notFoundFileSet = new HashSet <>(); ^ 1エラー –

+0

Java7を使用していない可能性があります。 'Set を使用してみてくださいnotFoundFileSet = new HashSet (); ' –

関連する問題