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

时间:2016-03-22 19:40:50

标签: java file user-interface jlist

我正在编写一个符合以下规范的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;
        }

    }

}

感谢您的时间。

1 个答案:

答案 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();
                 }
    }
});

其他来源: