2014-01-06 3 views
0

Я создаю музыкальный плеер, в котором есть таблица, показывающая песни из папки (например, список воспроизведения). Моя проблема в том, что добавленная следующая строка имеет тот же результат (имя), что и предыдущий.Java: File [] to JTable

В моей папке "следы" есть track1, Track2, дорожка 3. Если я использую:

File tracksFolder = new File("tracks"); 
final File[] tracks = tracksFolder.listFiles(); 

Vector<Vector<Object>> data = new Vector<Vector<Object>>(); 
Vector<Object> row = new Vector<Object>(); 

for (int i = 0; i < tracks.length; i++) { 
    System.out.println(tracks[i]); 
    row.add(tracks[i].toString()); 
    data.add(row); 
} 

Vector<String> headers = new Vector<String>(); 
headers.add("Song"); 

final JTable table = new JTable(data, headers); 
// some more code 

Он возвращается в консоли:

tracks/track 1.wav 
tracks/track 2.mp3 
tracks/track 3.flac 

но мой стол:

tracks/track 1.wav 
tracks/track 1.wav 
tracks/track 1.wav 

Самое странное, что он работает на моей консоли!

+0

сделать отладчик ваш друг. Посмотрите, сколько файлов вы можете увидеть trackFolder.listFiles() возвращается? –

+0

Я не совсем уверен, что вы имеете в виду, но я поставил: System.out.println (tracksFolder.listFiles(). ToString()); и это дало мне [Ljava.io.File; @ d8f459, который является только одной строкой. –

+0

Отладка позволяет вам пройти пошаговую оценку вашего кода. Если вы используете eclipse, нажмите [здесь] (http://www.vogella.com/tutorials/EclipseDebugging/article.html) –

ответ

3

Вы повторно используете векторный объект row для каждой отдельной строки. Вы просто добавляете записи в уже существующую строку; визуализатор, по-видимому, показывает первую запись вектора row.

Решение: Переместите создание строки Vector<Object> row = new Vector<Object>(); внутри цикла, чтобы создать новую для каждой строки.

Или лучше, прочитайте о моделях таблиц и используйте подходящий. На самом деле это намного меньше, если вы понимаете основы.

+0

Это сделало это. Спасибо. –