2012-05-15 50 views
2

我需要JList的幫助。需要將文本文件添加到列表,但txt文件被命名爲library.txt有:如何用txt文件中的某些單詞填充JList

title1 author1 description1 publisher1 
title2 author2 description2 publisher2 
title3 author3 description3 publisher3 
title4 author4 description4 publisher4 

什麼程序需要做的就是填單子與TXT,當標題用戶從列表中選擇該程序的某些標題需要將描述寫入JTextArea

這是我到目前爲止。

import java.awt.FlowLayout; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.DefaultListModel; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JTextArea; 

public class Library extends JFrame { 

    private JList lista; 
    private JTextArea tekst; 
    DefaultListModel model; 

    public Library() { 
     super("Biblioteka"); 
     this.setSize(300, 300); 
     setLayout(new FlowLayout()); 
     model = new DefaultListModel(); 
     lista = new JList(model); 
     add(lista); 
     tekst = new JTextArea(20, 20); 
     add(tekst); 
     File fajl = new File("library.txt"); 
     BufferedReader ulaz = null; 
     try { 
      FileReader fr = new FileReader(fajl); 
      ulaz = new BufferedReader(fr); 
      String linija; 
      try { 
       while ((linija = ulaz.readLine()) != null) { 
        //lista.add(linija); 
        //System.out.println(linija); 
        String[] reci = linija.split("\t"); 
        String naslovi = null; 
        for (int i = 0; i < reci.length; i++) { 
         naslovi = reci[0]; 
        } 
        int pos = lista.getModel().getSize(); 
        model.addElement(naslovi.toString()); 
       } 
      } catch (IOException ex) { 
       Logger.getLogger(Library.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } catch (FileNotFoundException ex) { 
      Logger.getLogger(Library.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public static void main(String[] args) { 
     Library l = new Library(); 
     l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     l.setSize(300, 430); 
     l.setVisible(true); 
    } 
} 
+3

1)*「這是我到目前爲止。」*請使用邏輯和一致的縮進代碼塊。該代碼的內容類似於您的狗寫的。我喜歡狗,但不會調試他們的代碼。 2)請在發佈之前仔細檢查您的文章的預覽。正因爲如此,我不得不收拾起來,還有更好的事情要做。 3)創建一個POJO來表示'Book'並將'Book'實例放入列表中。使用渲染器使它們按需顯示。選中後,使用該對象獲取詳細信息以顯示在GUI的其餘部分。 4)做3.會使問題變得多餘。 –

+2

5)應該在EDT上執行Swing代碼6)您的問題到底是什麼。您向我們展示了正在進行的工作,但忘了提及卡住的位置 – Robin

回答

0

安德魯在他的評論中提到使用POJO(簡單Java對象)像

class Book { 
    String title; 
    String author; 
    String description: 
    /* other fields*/ 
} 

那麼類似的循環改寫爲

while ((linija = ulaz.readLine()) != null) { 
    String[] reci = linija.split("\t"); 

    for (int i = 0; i < reci.length; i++) { 
     Book book = new Book(); 
     book.title = reci[0]; 
     book.description = reci[2]; 
     /* other stuff here */ 
     model.addElement(book); 
    } 
} 

使用再ListCellRenderer僅顯示標題ListListSelectionListener相應地聆聽和更新文字區域