如何使用文本文件中的某些单词填充JList

时间:2012-05-15 21:09:03

标签: java swing file-io jlist

我需要JList的帮助。需要将文本文件添加到列表中,但txt文件名为library.txt,其中包含:

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

1 个答案:

答案 0 :(得分: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中的标题,以便相应地收听和更新文本区域

相关问题