2017-02-15 8 views
0

В настоящее время я работаю над небольшим проектом, в котором Jframe имеет Jlist, в котором отображается массив файлов, которые были собраны путем сканирования через каталог.Правильное использование Java ArrayList

Весь процесс работает следующим образом: отдельный класс вызывает метод в классе Jframe под названием «main». Этот «основной» метод просматривает каталог (folderAndFiles) и перечисляет все имена файлов в обычный текстовый файл (file.txt). После этого отдельный класс отображает Jframe, в котором затем есть другой сканер, который читает новый текстовый файл (file.txt) и превращает все имена внутри этого файла в arraylist (filList). Внутри функции инициализации Jframe я устанавливаю DefaultListModel для добавления элементов массива в Jlist.

Все виды работ, но есть некоторые незначительные икоты. Во-первых, тот факт, что Jlist отображает вещи из горизонтального горизонтали, то есть это будет [File1.txt, File2.txt, File3.txt, etc...], а не вертикально, где имена файлов отображаются под ними. Затем вторая проблема, которая, вероятно, будет исправлена, если первая проблема будет исправлена, список массивов слишком длинный, а в Jlist после перечисления некоторых файлов он заканчивается тем, что «строка длинная, перейдите в режим завершенного просмотра, чтобы увидеть целая линия ... "

Я не совсем уверен, правильно ли я использую арраист и почему он не будет перечислять элементы в Jlist вертикально и правильно.

Ниже приведена вся Jframe, где размещается Jlist, и функция выполняется.

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

} 

Ниже показано, как я называю JFrame и функцию, от отдельного класса

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

wow that's является путаным, имея несколько методов 'static main' –

+1

' ArrayList' - это структура данных. Как вы * печатаете *, что структура данных не имеет реального отношения к самой структуре данных. Вы можете распечатать его в обратном порядке, если хотите. – Makoto

ответ

3

Я не совсем уверен ли я, используя ArrayList права

A JList не знает, как отображать элементы в ArrayList, поэтому вы не можете просто добавить ArrayList в ListModel.

Так что вам нужно пройти через ArrayList и добавить каждый товар в ListModel.

Или еще проще, просто избавьтесь от ArrayList и прочитайте данные из файла непосредственно в ListModel.

Ваш код плохо структурирован. Каждый раз, когда вы видите чрезмерное использование статических переменных и методов, вы знаете, что у вас есть проблема с дизайном.

Я бы начал с чтения раздела из учебника Swing по телефону How to Use Lists. Там есть рабочие примеры, которые покажут вам лучшую структуру программы. Вы можете начать с рабочего кода и изменить его для своих требований.

+0

Я очень благодарен за вход, я просто просто прочитал данные и поместил их в ListModel. Я просто был дураком и даже не думал об этом, спасибо. –

Смежные вопросы