Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Chiarimenti sul polimorfismo

    Salve a tutti.Sto cercando di capire come funziona il polimorfismo in java ma ho alcuni problemi nel capire il funzionamento... Adesso vi spiego
    Ho creato un tastierino con la swing dove ci sono 3 tipi di pulsanti : pulsanti numerici (da 0 a 9) tasti di controllo (cancella e Annulla) e tasti direzionali. Dunque ho creato un interfaccia Pulsante dove c'è il metodo isPusched() che sono andato ad implmentare nelle singole classi.

    Adesso devo mettere i listner e per far questo ho creato una classe apposita che ho chiamato ControllerListner che implementa l'ActionListner. Adesso vorrei che alla pressione dei diversi pulsanti mi fa operazioni differenti, io per adesso ci faccio stampare cose differenti attraverso il metodo isPusched() dei pulsanti...

    Forse non mi è chiaro il polimorfismo ma non riesco bene a capire come farlo funzionare...
    Grazie per l'eventuale aiuto

    Ciao

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Chiarimenti sul polimorfismo

    Originariamente inviato da LUCABORRELLI1
    Ho creato un tastierino con la swing dove ci sono 3 tipi di pulsanti : pulsanti numerici (da 0 a 9) tasti di controllo (cancella e Annulla) e tasti direzionali. Dunque ho creato un interfaccia Pulsante dove c'è il metodo isPusched() che sono andato ad implmentare nelle singole classi.

    Adesso devo mettere i listner e per far questo ho creato una classe apposita che ho chiamato ControllerListner che implementa l'ActionListner. Adesso vorrei che alla pressione dei diversi pulsanti mi fa operazioni differenti, io per adesso ci faccio stampare cose differenti attraverso il metodo isPusched() dei pulsanti...

    Forse non mi è chiaro il polimorfismo ma non riesco bene a capire come farlo funzionare...
    Grazie per l'eventuale aiuto
    Purtroppo non è molto ben chiaro ... bisognerebbe vedere il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Questa è la classe Tastierino:

    public class Tastierino extends JPanel{
    private Ibutton tastinumerici[]= new TastoNumerico[10];
    private Ibutton tastopiù = new TastoPiù("+");
    private Ibutton tastomeno = new TastoMeno("-");
    private int i;
    public Tastierino () {
    setLayout ( new GridLayout(4,3));
    for(i=0;i<=9;i++){
    tastinumerici[i]=new TastoNumerico(Integer.toString(i));
    }
    setButton();
    }

    public void setButton(){
    for(i=1;i<=9;i++){
    add((TastoNumerico)tastinumerici[i]);
    }
    add ((TastoMeno)tastomeno);
    add((TastoNumerico)tastinumerici[0]);
    add ((TastoPiù)tastopiù);
    }
    public TastoNumerico[] getTastiNum(){
    return ((TastoNumerico[])tastinumerici);
    }
    public TastoPiù getTastPiù(){
    return (TastoPiù)tastopiù;
    }
    public TastoMeno getTastoMeno(){
    return (TastoMeno)tastomeno;
    }
    }

    Interfaccia Ibutton:

    public interface Ibutton {
    public void IsPusched();
    }

    Classe TastoPiù

    public class TastoPiù extends JButton implements Ibutton {
    private String nome;
    public TastoPiù(String label) {
    super(label);
    nome=label;
    }
    public void IsPusched(){
    System.out.println(nome);
    }
    }

    Classe che mi gestisce l'actionlistner:

    public class InputController implements ActionListener{
    private Ibutton prova;
    public void actionPerformed(ActionEvent e) {
    prova.IsPusched();
    }
    }

  4. #4
    Ma non ti conviene fare una classe annidata anonima per ogni pulsante? é un pò più lunga ma gestisci meglio i vari eventi dei pulsanti

    potresti fare invece che una classe per l'actionlistener
    codice:
    JButton prova = new JButton("Prova);
    prova.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){IsPusched();}});
    Spero di aver capito il problema e non aver scritto invece una cavolata!!
    Mac user, Ubuntu user, Firefox supporter, Open Source supporter...

  5. #5
    effettivamente io facevo sempre così,nella stessa classe dove istanzio il pulsante aggiungo anche il listner, ma ho letto che è meglio fare una classe che gestisce i listner dei pulsanti... non è vera sta cosa???

  6. #6
    Originariamente inviato da LUCABORRELLI1
    effettivamente io facevo sempre così,nella stessa classe dove istanzio il pulsante aggiungo anche il listner, ma ho letto che è meglio fare una classe che gestisce i listner dei pulsanti... non è vera sta cosa???
    sinceramente non so, il mio professore di Java mi ha sempre detto di fare così, e sinceramente, io mi trovo meglio ad aggiungere l'ascoltatore dove creo il pulsante o il menù, se quacuno ti spiega cos'è meglio fa un piacere anche a me!
    Mac user, Ubuntu user, Firefox supporter, Open Source supporter...

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da LUCABORRELLI1
    Classe che mi gestisce l'actionlistner:

    public class InputController implements ActionListener{
    private Ibutton prova;
    public void actionPerformed(ActionEvent e) {
    prova.IsPusched();
    }
    }
    Trovo inutile questa classe, specialmente per il fatto che ha 1 Ibutton su cui invochi il metodo.

    L'ActionListener lo puoi implementare dove vuoi ma a parte questo, visto che vuoi usare il polimorfismo, ti conviene usare lo stesso identico oggetto ActionListener per tutti i pulsanti.
    Dal momento che tu sai che questo action listener verrà usato solo da componenti che sono degli Ibutton, ti basta prendere il componente "source" dell'evento (e.getSource() ), fare il cast a Ibutton ed invocare il metodo!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.