2017-02-15 17 views
0

私は現在、Jframeにディレクトリをスキャンして収集されたファイルのarraylistを表示するJlistがある小さなプロジェクトに取り組んでいます。JavaのArrayListの適切な使用

このようなプロセスはすべて独立したクラスとして動作し、Jframeクラスのメソッドmainを呼び出します。この「メイン」メソッドは、ディレクトリ(folderAndFiles)をスキャンし、すべてのファイル名を通常のテキストファイル(file.txt)にリストします。その後、別のクラスは別のスキャナを持つJframeを表示し、新しいテキストファイル(file.txt)を読み込み、そのファイル内のすべての名前をarraylist(filList)に変換します。 Jframeの初期化関数内で、私はDefaultListModelを設定して、arlististアイテムをJlistに追加します。

すべての種類の作品はありますが、多少の問題があります。最初に、Jlistがarraylistからのものを水平方向に表示するということです。これは、[File1.txt, File2.txt, File3.txt, etc...]のようになります。垂直方向ではなく、ファイル名が互いに下に表示されます。次に、最初の問題が修正された場合におそらく修正される2番目の問題は、配列リストが長すぎるし、Jlist上でファイルのリストを表示した後に "行が長いです。全体の行... "

私はarraylistの権利を使用しているかどうか、Jlist内のアイテムを垂直方向に正しくリストしない理由は完全にはわかりません。

以下は、Jlistが配置され、その機能が実行されているJframe全体です。

import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Scanner; 
import javax.swing.DefaultListModel; 

public class DisplayTest extends javax.swing.JFrame { 

    static String username = System.getProperty("user.name"); 

    static File file = new File("file.txt"); 
    static ArrayList<String> filList = new ArrayList<String>(); 

    public DisplayTest(){ 
     initComponents(); 
     DefaultListModel DLM = new DefaultListModel(); 
     DLM.addElement(filList); 
     jList1.setModel(DLM); 
     System.out.println(filList); 
    } 

    public static void main(String args[]) { 
     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
        new DisplayTest().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JList<String> jList1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JTextArea jTextArea1; 
    // End of variables declaration     

    public static void main() throws IOException { 

      try { 
      listFilesForFolderMac(folderAndFiles); 
      } finally { 
       Scanner scanner = new Scanner(file); 
       while (scanner.hasNextLine()) { 
       String line = scanner.nextLine(); 
       filList.add(line); 
      } 

    } 

    public static void listFilesForFolderMac(final File folder) throws IOException { 
     PrintWriter writToDoc = new PrintWriter(new FileWriter("file.txt",true)); 
     for (final File fileEntry : folder.listFiles()) { 
      if (fileEntry.isDirectory()) { 
       listFilesForFolderMac(fileEntry); 
      } else { 
       writToDoc.println(fileEntry.getName()); 
      } 
     } 
     writToDoc.close(); 
    } 

    final static File folderAndFiles = new File("/Users/" + username + "/Documents"); 

} 

は、私が

public static void main(String[] args) throws IOException { 
    try { 
     DisplayTest.main(); 
    } finally { 
     DisplayTest dTest = new DisplayTest(); 
     dTest.setVisible(true); 
    } 
} 
+0

「静的メイン」メソッドが複数あると混乱します。 –

+1

'ArrayList'はデータ構造体です。あなたはデータ構造がデータ構造そのものにどのように影響していないのか*印刷*します。あなたは本当にしたい場合は逆の順序で印刷することができます。 – Makoto

答えて

3

私はArrayListの右

Aを使用していますか完全に確認していない別々のクラスから、JFrameの機能を呼び出す方法ですJListは、ArrayListにアイテムを表示する方法を知らないので、ArrayListListModelに追加するだけではありません。

ArrayListを反復処理し、各項目をListModelに追加する必要があります。

さらに簡単に言えば、ArrayListを取り除き、ファイルのデータを直接ListModelに読み込んでください。

あなたのコードは構造が貧弱です。静的変数とメソッドの過度使用が見られるときはいつでも、設計上問題があることがわかります。

How to Use ListsのSwingチュートリアルのセクションを読んで始めます。よりよいプログラム構造を示す実例があります。作業コードで作業を開始し、要件に合わせて修正することができます。

+0

私は本当に入力を感謝し、私はちょうど直接データを読んで、それをListModelに入れました。私はちょうど馬鹿になっていて、そのようにすることさえ考えなかった、ありがとう。 –