我正在编写一个符合以下规范的Java GUI程序:编写一个允许用户从本地文件系统中选择文件的Java GUI应用程序。使用滚动条在JTextArea中显示所选文件的内容。仅支持显示文本文件就足够了。
我现在正在尝试实现将在JTextArea中显示所选文件内容的功能,但我不知道如何执行此操作。我假设我将向JList添加某种事件监听器,然后在JTextArea上调用setText但不知道如何解决这个问题。任何其他建议,以改善我的程序,以满足规范将是伟大的。这是我的GUI类:
import java.awt.Component;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.io.File;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileSystemView;
public class FileGUI {
@SuppressWarnings("unchecked")
public FileGUI() {
JFrame window = new JFrame("Local File List");
Container pane = window.getContentPane();
pane.setLayout(new GridLayout(2,1));
@SuppressWarnings("rawtypes")
JList fileList = new JList(new File("C:\\").listFiles());
fileList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
fileList.setCellRenderer(new MyCellRenderer());
fileList.setLayoutOrientation(javax.swing.JList.HORIZONTAL_WRAP);
fileList.setName("fileList");
fileList.setVisibleRowCount(-1);
pane.add(new JScrollPane(fileList));
JTextArea jt = new JTextArea(20, 50);
jt.setEditable(false);
JScrollPane js = new JScrollPane(jt);
pane.add(js);
window.pack();
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
@SuppressWarnings("unused")
FileGUI FG = new FileGUI();
}
});
}
private static class MyCellRenderer extends DefaultListCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getListCellRendererComponent(@SuppressWarnings("rawtypes") JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof File) {
File file = (File) value;
setText(file.getName());
setIcon(FileSystemView.getFileSystemView().getSystemIcon(file));
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
}
return this;
}
}
}
感谢您的时间。
答案 0 :(得分:2)
一种简单的方法是在你的onclick监听器中,读取文件然后更新你的视图。
list_item.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
try{
BufferedReader br = new BufferedReader(new FileReader("C:\\myfile.txt"));
String line;
while ((line = br.readLine())!= null)
{
// read file line by line here
your_text_area.append(line+"\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
});
其他来源: