将JLIST与模型一起使用



我正在制作一个应用程序,使您可以添加文件然后压缩它们,但是如何将文件从硬盘驱动器或任何硬盘驱动器中获取到我的应用程序中?我可以通过fileReader获取文件,但是如何将其放入我的GUI中?

我读到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)
        {
        }
    }
}

您可能想读取如何通过用户列表以获取更多详细信息,但是基本概念很简单。

创建自己是自我 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);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新