我需要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);
}
}
答案 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
仅显示List
和ListSelectionListener
中的标题,以便相应地收听和更新文本区域