2017-02-18 14 views
1

Как я могу заставить MouseListener быть преходящим в java? Скажем, у меня есть:Java MouseListener transient

public class PanelClass extends JPanel implements Serializable{ 
    private int w; 
    private int h; 
    public PanelClass(int w, int h){ 
     this.w = w; 
     this.h = h; 
      this.setSize(w, h); 
      this.setBounds(0, 0, w, h); 
    }  
} 

public class MainPanel extends JPanel implements Serializable{ 
    public MainPanel(){ 
     setSize(500,500); 
    } 
} 


public class MyClass implements MouseListener, Serializable{ 
    private ArrayList<PanelClass> panels = new ArrayList<>(); 
    private MainPanel mp = new MainPanel(); 

    for(PanelClass panel : panels){ 
     panel.addMouseListener(this); 
     mp.add(panel); 
    } 

    private void serialize(){ 
      //SERIALIZE MainPanel 
    } 

} 

Теперь, если я хочу, чтобы сериализовать MainPanel возвращает ошибку о GridLayout не Serializable.

Если я не добавлю MouseListener к панели, все ОК; будет сериализоваться.

Мне было интересно Если этот MouseListener можно установить как переходный и как?

Thank you.

+0

Я озадачен. Вы хотите не сериализовать 'MouseListener'; но единственным «MouseListener» здесь является класс, который вы пытаетесь сериализовать, «MyClass». –

+0

Извините, это был плохой пример. Я редактирую вопрос/код, надеюсь, этот пример будет лучше ... –

ответ

0

GridLayouts не являются сериализуемыми.

Что касается слушателя мыши - то, что вам нужно сделать, это удалить слушателя при сериализации объекта, а по методу десериализации - добавить слушателя мыши назад.

How to make my MouseListeners work in a deserialized JPanel?

Читать ответ там.

Надеюсь, это помогло.

0

OK ... Я решил это, создав пользовательский MouseListener и объявив его временным. Работает как шарм. :)