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);
}
}
wow, das ist verwirrend mit mehreren 'statischen Haupt'-Methoden –
' 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