2017-04-30 8 views
0

これは私がプログラムは、ユーザーがシンボル、背景色、および前景色を選択することができますし、それぞれのJButtonが押されたときにそれが変更さJButtonのこの設定を保存/ロードするにはどうすればよいですか?

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)); 

    } 

パネルにし、ArrayListに私のJButtonがすべてを追加する方法であります選択されたシンボル、前景色、および背景色。

DataOutputStreamとDataInputStreamを使用してJButton設定を保存したいと考えています。私は2つのアクションリスナをクリックして保存とロードメソッドをアクティブにする、保存とロードボタンにアタッチしました。ユーザーが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

[XMLEncoderの使用](http://www.oracle.com/technetwork/java/persistence4-140124.html)および/または[JAXB](https://docs.oracle.com/javase/tutorial/jaxb/intro/) – MadProgrammer

答えて

0

あなたは、ボタンを保持するオブジェクトを保存し、連載を試すことができます。ここで

は例です:

のシリアル化のために

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); 
    } 

} 

データを保持しているオブジェクトは:

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(); 
     } 
    } 

} 

シリアル化するオブジェクトのファイル名に拡張子 "の.ser" を持っている必要があります

+0

[* "警告:このクラスのシリアライズされたオブジェクトは、将来のSwingリリースと互換性がありません。現在のシリアライゼーションサポートは、同じバージョンのSwingを実行しているアプリケーション間の短期ストレージまたはRMIに適しています。 1.4以降、すべてのJavaBeansTMの長期保存のサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。* *(https://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html) – MadProgrammer

+0

.tilとして保存することは可能でしょうか? –

+0

@MadProgrammer –

関連する問題