当我在 JList 中单击文件时如何显示文件中的文本?

How to display the text within files when I click on them in my JList?

我正在编写一个 Java GUI 程序来满足以下规范:编写一个 Java GUI 应用程序,它允许用户 select 来自本地文件系统。在带有滚动条的 JTextArea 中显示 selected 文件的内容。只支持显示文本文件就够了

我现在正在尝试实现将在 JTextArea 中显示 selected 文件内容的功能,但我不知道如何执行此操作。我假设我将向 JList 添加某种事件侦听器,然后在 JTextArea 上调用 setText 但不知道如何去做。任何其他改进我的程序以满足规范的建议都会很棒。这是我的 GUI class:

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

    }

}

谢谢你的时间。

一种简单的方法是在您的 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();
                 }
    }
});

其他来源:

  • Find selected item of a JList and display it in real time