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

    [java] passare i valori un array di oggetti in un'altra classe

    Vi spiego il mio problema, stavo creando un Menu in Java utilizzando i componenti JMenuBar, JMenu ecc... La prima funzione è quella dell' INSERIMENTO, ossia per inserire gli oggetti nell'array, il problema si presenta quando usa la funzione RICERCA. Partiamo dal presupposto che non posso e non voglio mettere tutti i metodi nello stesso frame, quindi per ricerca ho creato una nuova classe, che si apre quando viene richiesta. Solo che quando passo l'array di oggetti, viene passato vuoto, senza i dati precedentemente inseriti. Ora vi mostro la parte di codice che ci interessa:
    Classe principale:
    public class Menu {

    private JFrame frame;
    private Ricerca x;
    private JTextField textField;
    private JTextField textField_1;
    private JTextField textField_2;
    private JTextField textField_3;
    protected Mensola volumi=new Mensola();
    ...
    ...
    mntmRicerca.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0)
    {
    //apro il frame ricerca
    frame.setVisible(false);
    x=new Ricerca();
    }
    });

    Classe che fa la ricerca:
    public class Ricerca {


    private JFrame frame;
    private JLabel lblInserisciTitolo;
    private JTextField textField;
    private JLabel label_1;
    private JTextField textField_1;
    private Menu a=new Menu();
    frame.setVisible(true);

    ...
    ...
    btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0)
    {
    String tit = null,aut = null;
    boolean flag=false; int i=0;
    if(textField.getText().length()==0) { JOptionPane.showMessageDialog(null, "INSERISCI IL TITOLO!"); flag=true; }
    else tit=textField.getText();


    if(textField_1.getText().length()==0) { JOptionPane.showMessageDialog(null, "INSERISCI L'AUTORE!"); flag=true; }
    else aut=textField_1.getText();


    Libro find=new Libro(tit,aut,0);
    Libro[] volumi1=a.volumi.getarrayvolumi();

    if(a.volumi.Ricerca(find, volumi1)!=-1) flag=true;

    if(flag==true) JOptionPane.showMessageDialog(null, "Libro trovato");
    else JOptionPane.showMessageDialog(null, "Libro non trovato");
    }
    });
    }

  2. #2
    Premetto che avevo già cercato una soluzione su internet, dove creavano un metodo nella classe dell'oggetto che restituiva l'array... ma non ha funzionato.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da GigiLoria Visualizza il messaggio
    codice:
    public class Ricerca {
    
    
        private JFrame frame;
        private JLabel lblInserisciTitolo;
        private JTextField textField;
        private JLabel label_1;
        private JTextField textField_1;
        private Menu a=new Menu();
    Se in Ricerca fai questo new Menu(), allora NON stai certamente usando l'oggetto Menu che aveva il frame e tutto il resto con cui l'utente stava interagendo (e in cui aveva probabilmente inserito dei dati). Invece così crei un oggetto Menu nuovo che quindi non contiene nulla di "utile".

    La soluzione "tecnica" banale (non la migliore, su questi aspetti di "design" delle classi ci sarebbe molto da dire) è quella di passare al nuovo oggetto Ricerca il reference all'oggetto Menu su cui stavi operando.

    Nella classe Menu, dove prima facevi:

    x=new Ricerca();

    dovresti fare

    x=new Ricerca(Menu.this);

    (nota che il this deve essere "qualificato", perché solo this fa riferimento alla istanza della anonymous inner class in cui sei in quel punto).

    Pertanto in Ricerca dovrai mettere un costruttore che ha come parametro un Menu, tenerlo (assegnarlo) quindi come variabile di istanza e quindi potrai usarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.