首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写入文件,然后用WindowListener保存

写入文件,然后用WindowListener保存
EN

Stack Overflow用户
提问于 2017-04-22 22:14:54
回答 1查看 120关注 0票数 0

我需要一些关于这个梦幻橄榄球程序的帮助,努力弄清楚如何将我的writetofile方法实现到add按钮中,然后在我退出程序时将其保存到close。

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

代码语言:javascript
复制
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();
   }


}
EN

回答 1

Stack Overflow用户

发布于 2017-04-22 22:47:17

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

请阅读How to Write a WindowListener上的Swing教程中的部分。您将实现windowClosing(...)方法并执行将数据保存到文件的逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43560232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档