使用JList的一个模式?(Using JList with a model?)

2019-10-17 09:46发布

我在做一个应用程序,可以让你添加文件,然后压缩他们,但如何从我的硬盘驱动器或为此事到我的应用程序的任何硬盘驱动器获得的文件? 我可以通过一个的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)
        {

        }
    }
}

Answer 1:

你可能想借此读通过怎么样的解释更多的细节,但基本概念是相当简单的。

创建你自己一个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);
        }
    }
}


文章来源: Using JList with a model?