2016-03-22 7 views
1

Ich schreibe ein Java-GUI-Programm, um die folgende Spezifikation zu erfüllen: Schreiben Sie eine Java-GUI-Anwendung, die es dem Benutzer ermöglicht, eine Datei aus dem lokalen Dateisystem auszuwählen. Zeigen Sie den Inhalt der ausgewählten Datei in einer JTextArea mit Bildlaufleisten an. Es reicht aus, nur die Anzeige von Textdateien zu unterstützen.Wie zeige ich den Text in Dateien an, wenn ich auf sie in meiner JList klicke?

Ich versuche jetzt, die Funktion zu implementieren, die den Inhalt der ausgewählten Datei in der JTextArea anzeigen wird, aber ich weiß nicht, wie das geht. Ich nehme an, dass ich der JList irgendeine Art von Ereignis-Listener hinzufügen und dann setText auf JTextArea aufrufen werde, aber ich weiß nicht, wie ich das machen soll. Irgendwelche anderen Vorschläge, um mein Programm zu verbessern, um die Spezifikation zu treffen, wäre groß. Hier ist meine GUI-Klasse:

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

    } 

} 

Vielen Dank für Ihre Zeit.

Antwort

2

Ein einfacher Weg wäre in Ihrem onclick Listener, lesen Sie die Datei und aktualisieren Sie Ihre Ansicht.

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

Zusätzliche Quelle:

+0

Danke für Ihre Hilfe, in meinem Beispiel, was würde "list_item" sein? –

+1

Ihre 'JList fileList' – Petro

+1

Ich habe eine Quelle für Sie zu lesen – Petro