2017-02-15 10 views
0

Ich arbeite derzeit an einem kleinen Projekt, wo ein Jframe eine Jlist hat, die eine Arraylist von Dateien anzeigt, die durch Scannen durch ein Verzeichnis gesammelt wurden.Java richtige Verwendung von ArrayList

Der gesamte Prozess funktioniert so, eine separate Klasse, ruft eine Methode in der Jframe-Klasse namens "main" auf. Diese "main" -Methode durchsucht ein Verzeichnis (folderAndFiles) und listet alle Dateinamen in einer normalen Textdatei (file.txt) auf. Im weiteren Verlauf zeigt die separate Klasse dann den Jframe an, der dann einen anderen Scanner hat, der die neue Textdatei (file.txt) liest und alle Namen innerhalb dieser Datei in eine Arraylist (filList) umwandelt. Innerhalb der Initialisierungsfunktion des Jframe setze ich dann ein DefaultListModel, um die Arraylist-Elemente zu der Jlist hinzuzufügen.

Alles funktioniert, aber es gibt ein paar kleine Schluckauf. Die erste Sache ist die Tatsache, dass die Jlist die Dinge von der Arraylist horizontal anzeigt, was bedeutet, dass es wie diese [File1.txt, File2.txt, File3.txt, etc...] ist und nicht vertikal, wo die Dateinamen untereinander angezeigt werden. Dann das zweite Problem, das wahrscheinlich behoben wird, wenn das erste Problem behoben ist, die Array-Liste ist zu lang und auf der Jlist nach dem Auflisten einiger der Dateien endet es mit der Aussage "Zeile ist zu lang, bitte wechseln Sie in den verpackten Modus zu sehen ganze Zeile ... "

Ich bin mir nicht ganz sicher, ob ich die Arraylist richtig verwende und warum sie die Artikel in der Jlist nicht vertikal und richtig auflisten wird.

Das folgende ist das ganze Jframe, wo die Jlist platziert ist und die Funktion passiert.

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

} 

Das folgende ist, wie ich die JFrame anrufen und Funktion, von der separaten Klasse

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

wow, das ist verwirrend mit mehreren 'statischen Haupt'-Methoden –

+1

' ArrayList' ist eine Datenstruktur. Wie Sie diese Datenstruktur * drucken *, hat keinen Einfluss auf die Datenstruktur selbst. Sie könnten es in umgekehrter Reihenfolge drucken, wenn Sie wirklich wollen. – Makoto

Antwort

3

Ich bin nicht ganz sicher, ob ich die Arraylist rechts

A bin mit JList kann nicht die Elemente in einem ArrayList anzeigen, so dass Sie nicht einfach ArrayList zu ListModel hinzufügen können.

Also müssen Sie durchlaufen die ArrayList und fügen Sie jedes Element an die ListModel.

Oder noch einfacher, einfach die ArrayList loswerden und die Daten aus der Datei direkt in die ListModel lesen.

Ihr Code ist schlecht strukturiert. Jedes Mal, wenn Sie eine übermäßige Verwendung von statischen Variablen und Methoden feststellen, haben Sie ein Konstruktionsproblem.

Ich würde beginnen, indem Sie den Abschnitt aus dem Swing-Tutorial auf How to Use Lists lesen. Es gibt Arbeitsbeispiele, die Ihnen eine bessere Programmstruktur zeigen. Sie können mit Arbeitscode beginnen und für Ihre Anforderungen ändern.

+0

Ich schätze die Eingabe sehr, ich habe die Daten direkt gelesen und in das ListModel eingefügt. Ich war nur ein Trottel und dachte nicht einmal daran, es so zu tun, danke. –