2017-04-30 6 views
0

Voici comment ajouter tous mes JButton au panneau et au arraylistComment sauvegarder/charger cette configuration de JButtons?

private ArrayList<JButton> b; 
    String defaultLogo = "O"; 


    for(int i=0; i<81;i++) 
    { 

     b.add(new JButton(defaultLogo)); 
     b.get(i).addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      for (int i = 0; i < b.size(); i++){ 
       if (e.getSource() == b.get(i)){ 
        b.get(i).setText(getSymbol()); 
        b.get(i).setForeground(getColor()); 
        b.get(i).setBackground(getBackColor()); 
       } 
      } 

     } 

     }); 
     tilePanel.add(b.get(i)); 

    } 

Le programme permet à un utilisateur de choisir un symbole, la couleur de fond et couleur de premier plan et quand chaque JButton est pressé, il passe à le symbole sélectionné, la couleur de premier plan et la couleur de fond.

Je souhaite pouvoir enregistrer la configuration JButton à l'aide de DataOutputStream et de DataInputStream. J'ai deux écouteurs d'action attachés à un bouton de sauvegarde et de chargement qui activent une méthode de sauvegarde et de chargement quand on appuie dessus. Que dois-je écrire dans chaque méthode pour permettre à un utilisateur d'enregistrer et de charger les fichiers des configurations JButton.

save = new JMenuItem("Save"); 
    file.add(save); 
    save.addActionListener(new ActionListener(){ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource()==save){ 
      save(); 
     } 

    } 

    }); 

    load = new JMenuItem("Load"); 
    file.add(load); 
    load.addActionListener(new ActionListener(){ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == load){ 
      load(); 
     } 

    } 

    }); 

here's an image of the program when its running

And another one

+0

[Utilisation de XMLEncoder] (http://www.oracle.com/technetwork/java/persistence4-140124.html) et/ou [JAXB] (https://docs.oracle.com/javase/tutorial/jaxb/intro/) – MadProgrammer

Répondre

0

Vous pouvez essayer sérialisation, l'enregistrement d'un objet qui contient vos boutons.

Voici un exemple:

L'objet qui contient les données

import java.io.Serializable; 
import java.util.ArrayList; 

public class Config implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private ArrayList<String[]> Data; 
    public Config(){ 
     Data=new ArrayList<String>(); 

    } 

    public void addData(String path){ 
     Data.add(path); 
    } 
    public String getData(int index){ 
     return Data.get(index); 
    } 

} 

Pour sérialisation:

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.nio.file.Paths; 
import java.io.File; 
public class FileSerial { 

    private FileSerial(){} 

    public static Config deserialize(){ 

     Config result; 

     try { 
      FileInputStream fis = new FileInputStream(Paths.get("path to your file")); 
      ObjectInputStream ois = new ObjectInputStream(fis); 
      result = (Config) ois.readObject(); 
      ois.close(); 
     } catch (Exception e){ 
      e.printStackTrace(); 
    } 

     return result; 

    } 

    public static void serialize(Config obj){ 
     try { 

      File file = new File(Paths.get("path to file")); 
      if(!file.exists()){ 
       file.getParentFile().mkdirs(); 
      } 

      FileOutputStream fos = new FileOutputStream(path.toString()); 
      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(obj); 
      oos.close(); 

     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

} 

Le nom de l'objet à sérialiser doit avoir l'extension ".ser"

+0

[* "Avertissement: Les objets sérialisés de cette classe ne seront pas compatibles avec les futures versions de Swing. La prise en charge de la sérialisation actuelle est appropriée pour le stockage à court terme ou RMI entre les applications exécutant la même version de Swing. Depuis le 1.4, la prise en charge du stockage à long terme de tous les JavaBeansTM a été ajoutée au package java.beans. S'il vous plaît voir XMLEncoder. "*] (Https://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html) – MadProgrammer

+0

serait-il possible de les enregistrer comme .til? –

+0

@MadProgrammer Comment Est-ce que j'implémenterais ceci dans ma classe d'homme de sorte que quand les méthodes d'enregistrement et de chargement sont activées les configurations sont sauvegardées/chargées? –