Newsgroup: it.comp.java
Titolo: Oggetti interfaccie e casting ( mi sono perso ) e post lungo

salve a tutti,
ora vi espongo il mio problema, credo di essere andato in confusione e
comunque non capisco perchè non funziona e questo mi preoccupa...
Allora, ho un'applicazione grafica che gestisce i dati su una tabella, le
solite operazioni: nuovo record edita record, cancella ...etc etc
per la visualizzazione del record ho creato una classe derivata da jPanel
che implementa la seguente interfaccia
public interface PanelInterface {
        public void setFieldsReadOnly();
        public void setFieldsEditable();
        public boolean check();
        public void resetData();
        public Object getData();
        public void setData(Object t);
}
e questo è un estratto della classe di cui parlavo sopra
public class JPanelTabella extends JPanel implements Observer,
PanelInterface {
//...che implementa i metodi delle interfaccie
}
poi una classe derivata da JFrame nella quale aggiungo il panel
public class Start extends JFrame {
        public static void main(String[] args) {
                /...
        }
private void initGUI() {
                try {
                        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                        BorderLayout thisLayout = new BorderLayout();
                        getContentPane().setLayout(thisLayout);
                        setJMenuBar(getJMenu(this));
                        getContentPane().add((JToolBar) getJToolBar(this), BorderLayout.NORTH);
                        getContentPane().add((Component) getJContainer(), BorderLayout.CENTER);
                        getContentPane().add((Component) getJSubContainer(), BorderLayout.SOUTH);
                        pack();
                        //setSize(1004, 748);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
//...........
        private Object jContainer;
//.............
        public void setJContainer(Object container) {           
                try {
                        getContentPane().remove((Component) jContainer);
                } catch (Exception ex) {
                }
                jContainer = container;
                getContentPane().add((JPanel)jContainer);
                ((JPanel) jContainer).validate();
                SwingUtilities
                                .updateComponentTreeUI((JPanel)jContainer);
                pack();
        }
        public Object getJContainer() {
                if(jSubContainer == null){
                        jSubContainer = new JPanel();
                }
                return jSubContainer;
        }
//...........
}
il menu e la tool bar sono due classi distinte in cui ho posizionato menu e
bottoni rispettivamente e ho le due action listner rispettivamente
public class Menu extends JMenu{
//................
jMenuItemTerminal.addActionListener(new ActionListener () {
  public void actionPerformed(ActionEvent e) {
        Tabella t = null;
        try {
        t = (Tabella) Controller.getFirst("Terminal");
        frame.actual = t;                                               
        } catch (ClassNotFoundException e1) {
                e1.printStackTrace();
        }
        JPanelTabella p =  new JPanelTabella();
        if (frame.actual != null) {
        ((Observable) frame.actual).addObserver(p);     
        }
        p.setFieldsReadOnly();
        frame.setJContainer(p);
        frame.setCurrent(0);
}
});
//...................
}
public class TooBar extends JToolBar{
//.....................................
public void actionPerformed(ActionEvent evt) {
 if(state.equals("view") && frame.getCurrent() >= 0){
  ((PanelInterface) frame.getJContainer()).resetData();
  ((PanelInterface) frame.getJContainer()).setFieldsEditable();
  setState("edit");
 }
}
//.....................................
}
il mio problema è che in quest'ultima action quando la vado ad eseguire mi
dice che non è possibile fare il casting a PanelInterface naturalmente dopo
che ho istanziato JPanelTabella.
Naturalmente io ho diversi tipi di JPanelTabella e a priori non so quale ho
istanziato e perciò ho usato un'interfaccia ma non capisco cosa sbaglio.
Scusate il post lungo, spero di essermi spiegato e che possiate aiutarmi.
grazie
Umberto

 che ho istanziato JPanelTabella.
Sostanzialmente perche'  getJContainer() ritorna un Object.
Bisognerebbe che PanelInterface estendesse un interfaccia comune a cio' 
che in realta' ritorna getJContainer().
Se fosse
public interface PanelInterface extends MenuContainer {
e
public PanelInterface getJContainer() {
che ti mette ar riparo dal casting, ma avresti comunque un problema a 
runtime, in qunto se frame.getJContainer() costruisce un JPanel, questo 
non puo' avere uno dei metodi dell'interfaccia PanelInterface.
Per cui dovresti avere una classe che estende Jpanel e che implementi 
l'interfaccia PanelInterface da istanziare nel metodo getJContainer,
ad esempio:
public class MioContainer extends JPanel implements PanelInterface {
...
e
public MioContainer getJContainer() {
return new MioContainer();
...
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'