2012-11-09 33 views
1

我正在製作一個應用程序,允許您添加文件然後對其進行壓縮,但是如何將我的硬盤驅動器或任何硬盤中的文件存入我的應用程序?我可以通過文件讀取器獲取文件,但是如何將其放入我的GUI?在模型中使用JList?

我讀到defaultListModel是走的路,但我不確定。

public class LockNCompressWindow 
{ 
    public static void main(String[] args) 
    { 
     LockFrame w = new LockFrame(); 
     w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     w.setSize(500,500); 
     w.setResizable(false); 
     w.setVisible(true); 
    } 
} 

class LockFrame extends JFrame implements ActionListener 
{ 
    //Declaring MenuBar and components 
    JMenuBar menuBar = new JMenuBar(); 
    JMenu menu = new JMenu("File"); 
    JMenuItem MenuItemClose = new JMenuItem("Close"); 

    //Declaring Panels 
    JPanel PanelNorth = new JPanel(); 
    JPanel PanelCenter = new JPanel(); 
    JPanel PanelSouth = new JPanel(); 

    //Declaring Buttons 
    JButton ButtonAddFile = new JButton("Add File"); 
    JButton ButtonDeleteFile = new JButton("Delete File"); 
    JButton ButtonLock = new JButton("Lock"); 
    JButton ButtonUnlock = new JButton("Unlock"); 

    //Declaring FileChooser 
    JFileChooser chooser = new JFileChooser(); 

    public LockFrame() 
    { 
     //Title of the frame 
     super("Lock and Zip"); 

     //Creating Menu bar 
     super.setJMenuBar(menuBar); 

     //Creating the Menu Tab 
     menuBar.add(menu); 

     //Creating a Menu Item 
     menu.add(MenuItemClose); 

     //Adding North Panel 
     PanelNorth.setBorder(BorderFactory.createEtchedBorder()); 

     super.add(PanelNorth); 

     PanelNorth.add(ButtonAddFile); 
     PanelNorth.add(ButtonDeleteFile); 
     add(PanelNorth,BorderLayout.NORTH); 

     //Adding Center Panel to Frame 
     super.add(PanelCenter); 

     //Adding Scroll Pane 
     JScrollPane listScroller = new JScrollPane(); 
     listScroller.setPreferredSize(new Dimension(400,360)); 

     PanelCenter.add(listScroller); 
     add(PanelCenter, BorderLayout.CENTER); 

     //Adding South Panel 
     PanelSouth.setBorder(BorderFactory.createEtchedBorder()); 

     super.add(PanelCenter); 

     PanelSouth.add(ButtonLock); 
     PanelSouth.add(ButtonUnlock); 
     PanelSouth.add(ButtonPassword); 
     add(PanelSouth,BorderLayout.SOUTH); 

     //Action Listeners 
     ButtonAddFile.addActionListener(this); 
     ButtonPassword.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     Object Source = e.getSource(); 
     int ReturnValue; 

     if (Source == ButtonAddFile) 
     { 
      ReturnValue = chooser.showOpenDialog(LockFrame.this); 
      if (ReturnValue == JFileChooser.APPROVE_OPTION()) 
      { 
       File file = chooser.getSelectedFile(); 
       //Add the file to you center panel 
      } 
     } 

     if (Source == ButtonDeleteFile) 
     { 

     } 

     if (Source == ButtonLock) 
     { 

     } 

     if (Source == ButtonUnlock) 
     { 

     } 

     if (Source == ButtonPassword) 
     { 

     } 
    } 
} 
+0

你是什麼意思是「把一個文件到一個GUI」嗎? – Flawyte

+0

我只是想讓文件顯示在我的面板中。現在發生的事情是在打開目錄並選擇一個文件後什麼也沒有發生。 – rogerthat

+0

如果文件僅包含文本,則可以將其內容放入JTextArea或JEditorPane中。 – Flawyte

回答

3

您可能想通過How to user Lists瞭解更多詳情,但基本概念相當簡單。

創建您自己的一個ListModel。在這個例子中,我定製了我自己的,你可以很容易地使用DefaultListModel,並添加你想要的對象。

創建你自己一個JList並應用模式,它的,那麼,僅此而已......

public class FileAdder { 

    public static void main(String[] args) { 
     new FileAdder(); 
    } 

    public FileAdder() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new FileAdderPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class FileAdderPane extends JPanel { 

     private JList fileList; 
     private JFileChooser chooser; 

     public FileAdderPane() { 
      setLayout(new BorderLayout()); 

      fileList = new JList(new MyFileListModel()); 
      JButton addMore = new JButton("Add More"); 
      addMore.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        if (chooser == null) { 
         chooser = new JFileChooser(); 
         chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 
         chooser.setMultiSelectionEnabled(true); 
        } 
        switch (chooser.showOpenDialog(FileAdderPane.this)) { 
         case JFileChooser.APPROVE_OPTION: 
          File[] files = chooser.getSelectedFiles(); 
          if (files != null && files.length > 0) { 
           MyFileListModel model = (MyFileListModel) fileList.getModel(); 
           for (File file : files) { 
            model.add(file); 
           } 
          } 
          break; 
        } 
       } 
      }); 

      add(new JScrollPane(fileList)); 
      add(addMore, BorderLayout.SOUTH); 
     } 
    } 

    public class MyFileListModel extends AbstractListModel { 

     private List<File> files = new ArrayList<File>(25); 

     @Override 
     public int getSize() { 
      return files.size(); 
     } 

     @Override 
     public Object getElementAt(int index) { 
      return files.get(index); 
     } 

     public void add(File file) { 
      files.add(file); 
      fireIntervalAdded(this, files.size() - 1, files.size() - 1); 
     } 

     public void remove(File file) { 
      int index = files.indexOf(file); 
      files.remove(file); 
      fireIntervalRemoved(this, index, index); 
     } 
    } 
}