2

我需要帮助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);
    }
}
4

1 回答 1

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

然后使用 aListCellRenderer仅显示标题中的标题List并使用 aListSelectionListener相应地收听和更新文本区域

于 2012-05-17T20:51:08.377 回答