写入文件,然后使用WindowListener

时间:2017-04-22 14:14:54

标签: java swing file-io jframe windowlistener

需要一些关于这个梦幻足球计划的帮助,努力弄清楚如何在添加按钮中实现我的writetofile方法,然后在退出程序时将其保存在关闭状态。

朋友告诉我使用WindowListener,但不知道如何使用它。

import java.awt.GridLayout; 
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
import javax.swing.ListSelectionModel; 
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.*;
import java.util.*;

public class JListFBExample extends JFrame 
{

   private JList<Footballer> rhsList;
   private DefaultListModel<Footballer> rhsListModel; 
   private JButton btnIn; 
   private JButton btnOut;
   private JButton btnAdd;
   private JButton btnDelete;
   private JButton acceptPlayer;
   private JTextField playerFName;
   private JTextField playerLName;
   private JComboBox comboBox;

   private JList<Footballer> fbList;
   private ArrayList<Footballer> fbArrayList =  new ArrayList<Footballer();



 private DefaultListModel<Footballer> fbListModel; 


   public JListFBExample() throws IOException, ClassNotFoundException 
   {
      readRecordsFromFile();

      //create the model and add elements
      fbListModel = new DefaultListModel<>();


      for(Footballer f : fbArrayList)
         fbListModel.addElement(f); 


      fbList = new JList<>(fbListModel);

      //create the model and add elements
      rhsListModel = new DefaultListModel<>();
      rhsList = new JList<>(rhsListModel);

      setLayout(new GridLayout(1, 3));

      add(new JScrollPane(fbList));   //add the list to scrollpane and to the frame
      add(createButtonPanel());
      add(new JScrollPane(rhsList));    
   }  

   public JPanel createButtonPanel()
   {
      JPanel panel = new JPanel();


      ActionListener listener = new ButtonListener();
      ActionListener delListener = new DeleteListener();

      btnIn = new JButton(">>"); 
      btnOut = new JButton("<<");
      btnAdd = new JButton("Add");
      btnDelete = new JButton("Delete");

      btnIn.addActionListener(listener); 
      btnOut.addActionListener(listener);
      btnDelete.addActionListener(delListener);
      btnAdd.addActionListener(
         new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
               int i = JOptionPane.showConfirmDialog(null, addPlayerPanel(), "Add player", JOptionPane.OK_CANCEL_OPTION);

               if(i== JOptionPane.OK_OPTION)
               {
                  Footballer f = new Footballer(playerFName.getText(), playerLName.getText(), (String)comboBox.getSelectedItem());
                  fbListModel.addElement(f);
               }
           }
        });

      panel.add(btnIn); 
      panel.add(btnOut);
      panel.add(btnAdd);
      panel.add(btnDelete);


      return panel;
   } 

   public JPanel addPlayerPanel()
   {
      JPanel playerPanel = new JPanel(new GridLayout(3,1)); 

      playerFName = new JTextField(15);
      playerLName = new JTextField(15);

      String[] options = { "Goalkeeper", "Defender", "Midfielder", "Forward"};
      comboBox = new JComboBox(options);

      playerPanel.add(playerFName);
      playerPanel.add(playerLName);
      playerPanel.add(comboBox);

      return playerPanel;

   }   





   public class ButtonListener implements ActionListener
   {
      public void actionPerformed(ActionEvent e)
      {
         if(e.getSource().equals(btnIn))
         { 
            int[] fromIndex = fbList.getSelectedIndices(); 
            Object[] from = fbList.getSelectedValues();  

            for(Object s : from)  //for each object in from -- in the selected list 
               //add to rhslist
               rhsListModel.addElement((Footballer)s); 
            for(Object s : from)   
               fbListModel.removeElement((Footballer)s);
         }
         else if(e.getSource().equals(btnOut))
         {
            int[] fromIndex = rhsList.getSelectedIndices();
            Object[] from = rhsList.getSelectedValues();

            for(Object s : from)
               fbListModel.addElement((Footballer)s);
            for(Object s : from)   
               rhsListModel.removeElement((Footballer)s);
         }   
      }
   }

   public class DeleteListener implements ActionListener
   {
      public void actionPerformed(ActionEvent d)
      {
         if(d.getSource().equals(btnDelete))
         {
            int[] fromIndex = fbList.getSelectedIndices(); 
            Object[] from = fbList.getSelectedValues();  

            for(Object s : from)   
               fbListModel.removeElement((Footballer)s);
         }
      }
   }            


    // writeRecordsToFile()
   public void writeRecordsToFile() throws IOException,FileNotFoundException
   {        
      ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("players.bin"));   
      os.writeObject(fbArrayList);  
      os.close();  
   }  


    //readRecordsFromFile()
   public void readRecordsFromFile() throws IOException, ClassNotFoundException
   {
      ObjectInputStream is = new ObjectInputStream (new FileInputStream("players.bin"));
      fbArrayList = (ArrayList<Footballer>)is.readObject();  //note use of cast
      is.close();
   }


}

1 个答案:

答案 0 :(得分:1)

  

朋友告诉我使用WindowListener但不知道如何使用它。

阅读How to Write a WindowListener上的Swing教程中的部分。您将实现Mapper.Initialize(c => c.AddProfile<MappingProfile>()); 方法并执行逻辑以将数据保存到文件中。