/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.forms.layouts;
import java.awt.Component;
import java.awt.Container;
import java.awt.ItemSelectable;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* @author mg
*/
public class CardLayout extends java.awt.CardLayout {
protected Set<ItemListener> changeListeners = new HashSet<>();
protected Map<String, Component> comps = new HashMap<>();
protected Map<Component, String> cards = new HashMap<>();
public CardLayout() {
this(0, 0);
}
public CardLayout(int hgap, int vgap) {
super(hgap, vgap);
}
@Override
public void addLayoutComponent(Component comp, Object constraints) {
super.addLayoutComponent(comp, constraints);
if (constraints instanceof String) {
comps.put((String) constraints, comp);
cards.put(comp, (String) constraints);
}
}
@Override
public void removeLayoutComponent(Component comp) {
super.removeLayoutComponent(comp);
String wasCard = cards.remove(comp);
if(wasCard != null){
comps.remove(wasCard);
}
}
public String getCard(Component aComp){
return cards.get(aComp);
}
public Component getComponent(String aCardName) {
return comps.get(aCardName);
}
@Override
public void show(Container parent, String name) {
super.show(parent, name);
fireStateChanged(getComponent(name));
}
protected void fireStateChanged(Component aItem) {
ItemEvent e = new ItemEvent(new ItemSelectable() {
@Override
public Object[] getSelectedObjects() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void addItemListener(ItemListener l) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void removeItemListener(ItemListener l) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}, 0, aItem, 0);
changeListeners.stream().forEach((l) -> {
l.itemStateChanged(e);
});
}
public void addChangeListener(ItemListener l) {
changeListeners.add(l);
}
public void removeChangeListener(ItemListener l) {
changeListeners.remove(l);
}
}