有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何用txt文件中的某些单词填充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) 个答案

  1. # 1 楼答案

    正如Andrew在评论中提到的,使用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只显示List中的标题,使用ListSelectionListener收听并相应地更新文本区域