Как мне сохранить / загрузить эту конфигурацию JButtons?
Вот как я добавляю все свои 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));
}
Программа позволяет пользователю выбрать символ, цвет фона и цвет переднего плана, и при нажатии каждой кнопки JButton она изменяется на выбранный символ, цвет переднего плана и цвет фона.
Я хочу иметь возможность сохранить конфигурацию JButton, используя DataOutputStream и DataInputStream. У меня есть два слушателя действия, прикрепленные к кнопке сохранения и загрузки, которые активируют метод сохранения и загрузки при нажатии. Что я должен написать в каждом методе, чтобы позволить пользователю сохранять и загружать файлы конфигураций 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();
}
}
});
1 ответ
Вы можете попробовать сериализацию, сохранив объект, который содержит ваши кнопки.
Вот пример:
Объект, который содержит данные
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"