Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    9

    array di JLabel, non ne esco fuori...

    salve a tutti ragazzi,

    sono quasi riuscita a completare un programma, ma c'è una cosa che nn mi torna. Ho un array di JLabel e ci devo modificare iltesto. Ho visto che bisogna usare il metodo setText() e allora ho fatto:

    codice:
    public void aggiornaGrafica (String name, String surname, String interests)
    	{
    		System.out.println("ciao ci sono" + name + surname + interests);
    		labelarray[1].setText(name) ;
    		labelarray[3].setText(surname) ;
    		labelarray[5].setText(interests) ;
    	}
    il system.out.print è per verificare che le stringhe vengono passate, infatti arrivano a questo metodo, ma sullìistruzione labelarray[1].setText(name) ;
    avviene un errore di tipo NullPointerException.

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Grafica.aggiornaGrafica(Grafica.java:283)
    at Controller.letturaProxyUno(Controller.java:39)
    at Grafica$ButtonListener.actionPerformed(Grafica.jav a:268)
    at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


    La riga 283 della classe Grafica è appunto labelarray[1].setText(name) ;

    Io non so che fare, ho dichiarato questo array di JLabel nella classe grafica così:

    codice:
    public class Grafica implements ActionListener, WindowListener
    {
    	public static final int LARGHEZZA = 800;
    	public static final int ALTEZZA = 500;
    	static JLabel[] labelarray ;
    	static JLabel []labelarray2 ;
    	
    	private final Controller controlInGrafica;
    
    	
    	public Grafica (final Controller controlloPassato)
    	{
                             //costruttore...... e metodi......
    nel costruttore riesco a creare le label con
    codice:
    labelarray[i] = new JLabel ("TESTO");
    ovviamente all'interno di cicli. Sempre nei cicli se dichiaro:
    codice:
    labelarray[i] = new JLabel ();
    labelarray[i].setText("TESTO");
    la label assume sempre il testo che indico.

    Non riesco a capire perchè richiamando un metodo da fuori non funzioni più...

    potete darmi una mano??

  2. #2
    Hai istanziato l'array?

    codice:
    labelarray = new JLabel[unnumero];
    prima dell'aggiorna grafica intendo.


  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    9
    ciao anto, ti ringrazio della risposta.

    Certo, è tutto istanziato, anzi ti mostro la classe grafica (il codice non è per niente ottimizzato) :

    codice:
    public Grafica (final Controller controlloPassato)
    	{
    		//Controller controlInGrafica = new Controller() ;
    
    
    		controlInGrafica = controlloPassato ;
    		
    		JFrame window = new JFrame("Interfaccia Grafica");
    	    window.setBounds(400,200,LARGHEZZA,ALTEZZA);
    	    window.setVisible(true);
    	    
    	    
    	    
    	    Border border = LineBorder.createBlackLineBorder() ;
    	    window.getContentPane().setLayout(new GridLayout(1,2)) ; 
    	    window.getContentPane().setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT ) ;
    	    
    	     
    	    JButton [] buttonarray = new JButton [4] ;
    		JLabel []labelarray = new JLabel [6] ;
    		JLabel []labelarray2 = new JLabel [6] ;
    		JPanel pannellosecondario = new JPanel() ;
    		
    
    		JTextField [] arraytext = new JTextField[3] ;
    	   JPanel [] pannelli = new JPanel [4] ;
    
    
    	   
    	   
    	   
    	   
    	   for (int i=0 ; i<2 ; i++)
    	    {
    	    	pannelli[i] = new JPanel () ;
    	    	pannelli[i].setBorder(border) ;
    	    	pannelli[i].setLayout(new GridLayout (4,2)) ;
    	    	
    	    	pannelli[i].setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT) ;
    	    	pannelli[i].setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)) ;
    
    	    
    	    }
    
    	    for (int i=0 ; i<6 ; i++)
    	    {
    	    	
    	    	if (i==0)
    	    	{
    	    		labelarray[i] = new JLabel("NOME");
    	    		
    	    	}
    	    	else if (i==2)
    	    	{
    	    		labelarray[i] = new JLabel("COGNOME") ;
    	    		
    	    	}
    	    	else if (i==4)
    	    	{
    	    		labelarray[i] = new JLabel("INTERESSI") ;
    	    		
    	    	}
    	    	else if (i==1 || i==3 || i==5)
    	    	{
    	    		labelarray[i] = new JLabel ("") ;
    	    		
    	    	}
    
    	    	
    		    
    	    	labelarray[i].setPreferredSize(new Dimension(20, 10)) ;
    	    	labelarray[i].setBorder(border) ;
    	    	labelarray[i].setBackground(new Color (76)) ;
    	    	pannelli[0].add(labelarray[i]) ;
    	    }
    	    
    	    window.getContentPane().add(pannelli[0]) ;
    	   
    	    
    	    
    	    for (int i=0 ; i<6 ; i++)
    	    {
    	    	
    	    	if (i==0)
    	    	{
    	    		labelarray2[i] = new JLabel("NOME");
    		    	pannelli[1].add(labelarray2[i]) ;
    		    	labelarray2[i].setPreferredSize(new Dimension(20, 10)) ;
    		    	labelarray2[i].setBorder(border) ;
    
    	    		
    	    	}
    	    	else if (i==2)
    	    	{
    	    		labelarray2[i] = new JLabel("COGNOME") ;
    		    	pannelli[1].add(labelarray2[i]) ;
    		    	labelarray2[i].setPreferredSize(new Dimension(20, 10)) ;
    		    	labelarray2[i].setBorder(border) ;
    
    	    		
    	    	}
    	    	else if (i==4)
    	    	{
    	    		labelarray2[i] = new JLabel("INTERESSI") ;
    		    	pannelli[1].add(labelarray2[i]) ;
    		    	labelarray2[i].setPreferredSize(new Dimension(20, 10)) ;
    		    	labelarray2[i].setBorder(border) ;
    
    	    		
    	    	}
    	    	else if (i==1 )
    	    	{
    	    		arraytext[0] = new JTextField ("") ;
    		    	pannelli[1].add(arraytext[0]) ;
    
    	    		
    	    	}
    	    	
    	    	else if (i==3 )
    	    	{
    	    		arraytext[1] = new JTextField ("") ;
    		    	pannelli[1].add(arraytext[1]) ;
    
    	    		
    	    	}
    	    	
    	    	else if (i==5 )
    	    	{
    	    		arraytext[2] = new JTextField ("") ;
    		    	pannelli[1].add(arraytext[2]) ;
    
    	    		
    	    	}
    		    
    	    	
    	    }
    	    
    	    window.getContentPane().add(pannelli[1]) ;
    
    	    
    	    for (int i=0 ; i<4 ; i++)
    	    {
    	    	
    	    	if (i==0)
    	    	{
    	    		buttonarray[i] = new JButton("LEGGI CON PROXY 1");
    	    		buttonarray[i].addActionListener(new ButtonListener()) ;
    	    		pannelli[0].add(buttonarray[i]) ;
    	    	}
    	    	else if (i==1)
    	    	{
    	    		buttonarray[i] = new JButton("LEGGI CON PROXY 2") ;
    	    		buttonarray[i].addActionListener(new ButtonListener()) ;
    
    	    		pannelli[0].add(buttonarray[i]) ;
    	    	}
    	    	else if (i==2)
    	    	{
    	    		buttonarray[i] = new JButton("SETTA CON PROXY 1") ;
    	    		buttonarray[i].addActionListener(new ButtonListener()) ;
    
    	    		pannelli[1].add(buttonarray[i]) ;
    	    	}
    	    	else if (i==3)
    	    	{
    	    		buttonarray[i] = new JButton ("SETTA CON PROXY 2") ;
    	    		buttonarray[i].addActionListener(new ButtonListener()) ;
    
    	    		pannelli[1].add(buttonarray[i]) ;
    
    	    	}
    	    
    	    }
    		
    	}
    
    
    	
    	class ButtonListener implements ActionListener
    	{
    		
    		public void actionPerformed(final ActionEvent e) 
    		{
    			//tramite questa variabile identifico il bottone premuto, estraendone il source
    			//
    			final JButton tastoPremuto= (JButton)e.getSource();
    			  
    			
    
    			
    					if ( tastoPremuto.getText()== "LEGGI CON PROXY 1") 
    						
    						controlInGrafica.letturaProxyUno();
    					/*
    					else if ( tastoPremuto.getText()== "LEGGI CON PROXY 2")
    						controlInGrafica.letturaProxyDue();			
    					else if ( tastoPremuto.getText()== "SETTA CON PROXY 1")
    						   controlInGrafica.settaggioProxyUno();				
    					else if ( tastoPremuto.getText() == "SETTA CON PROXY 2")
    						controlInGrafica.settaggioProxyDue();
    		*/
    		}
    	}
    	
    	public void aggiornaGrafica (String name, String surname, String interests)
    	{
    		System.out.println("ciao ci sono" + name + surname + interests);
    		nome = name;
    		cognome = surname ;
    		interessi = interests;
    		
    		labelarray[1].setText(nome) ;
    		labelarray[3].setText(cognome) ;
    		labelarray[5].setText(interessi) ;
    	}
    
    
    
    
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowActivated(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowClosed(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowClosing(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowDeactivated(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowDeiconified(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowIconified(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void windowOpened(WindowEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    ecco... nel metodo aggiornaGrafica (String, String, String), che viene chiamato esternamente dal Controller, alla riga
    labelarray[1].setText(nome) ;

    dà errore e non riesco a capire perchè....

  4. #4
    Sei con un IDE? Se sì e non hai problemi a farlo, metti un breakpoint sulla riga che ti esplode e controlla se l'array è nullo e se non lo è, controlla i suoi oggetti. Provo a dare un'occhiata al codice.


  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    9
    Originariamente inviato da antotan
    Sei con un IDE? Se sì e non hai problemi a farlo, metti un breakpoint sulla riga che ti esplode e controlla se l'array è nullo e se non lo è, controlla i suoi oggetti. Provo a dare un'occhiata al codice.

    Grazie mille per la disponibilità anto! Sì sto usando Eclipse SDK 3.5.0, Build I20090611-1540

    Provo a fare come mi hai detto, è che non sono ancora molto pratica coi debug, ma ci proverò lo stesso


  6. #6
    Il codice del costruttore sembra apposto, c'è da vedere quando l'altro oggetto chiama il metodo.
    Volendo comunque puoi utilizzare questo:

    codice:
    public void aggiornaGrafica (String name, String surname, String interests)
    {
        System.out.println("ciao ci sono" + name + surname + interests);
        nome = name;
        cognome = surname ;
        interessi = interests;
        
        if(labelarray != null)
          System.out.println("labelarray ha" + labelarray.length + " elementi");
        else
        {
          System.out.println("NULLO");
          return;
        }
    		
        labelarray[1].setText(nome) ;
        labelarray[3].setText(cognome) ;
        labelarray[5].setText(interessi) ;
    }
    magari ti torna utile per vedere lo stato dell'oggetto

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    9
    Originariamente inviato da antotan
    Il codice del costruttore sembra apposto, c'è da vedere quando l'altro oggetto chiama il metodo.
    Volendo comunque puoi utilizzare questo:

    codice:
    public void aggiornaGrafica (String name, String surname, String interests)
    {
        System.out.println("ciao ci sono" + name + surname + interests);
        nome = name;
        cognome = surname ;
        interessi = interests;
        
        if(labelarray != null)
          System.out.println("labelarray ha" + labelarray.length + " elementi");
        else
        {
          System.out.println("NULLO");
          return;
        }
    		
        labelarray[1].setText(nome) ;
        labelarray[3].setText(cognome) ;
        labelarray[5].setText(interessi) ;
    }
    magari ti torna utile per vedere lo stato dell'oggetto
    hai perfetamente ragione, a quel passaggio l'array è vuoto.
    Il codice del controller è questo
    codice:
    public class Controller 
    {
    
    	static String name ;
    	static String surname ;
    	static String interests ;
    	//static InterfacciaPersone proxyInController = new ImplementazionePersone();
    	Richieditore test ;
    	static InterfacciaPersone proxyController ;
    	static InterfacciaPersone persona;
    	private static Grafica interfaccia ; 
    
    	
    	
    	
    	public Controller ()
    	{
    		test = new Richieditore(this);
    		interfaccia  = new Grafica(this) ;
    
    		
    	}
    	
    	public void riceviDati(InterfacciaPersone proxyPassato, InterfacciaPersone personaPassata)
    	{
    		proxyController = proxyPassato ;
    		persona = personaPassata ;
    		
    		
    	}
    	
    	public static void letturaProxyUno ()
    	{
    
    		name = proxyController.getName();
    		surname = proxyController.getSurname();
    		interests = proxyController.getInterests();
    		System.out.println (name);
    		System.out.println (surname);
    		System.out.println (interests);
    		interfaccia.aggiornaGrafica(name, surname, interests);
    
    
    		
    	}
    	
    	///public static void acquisisciO
    	
    	public static void letturaProxyDue ()
    	{
    		
    		
    		
    	}
    	
    	public static void settaggioProxyUno ()
    	{
    		
    		
    		
    	}
    	
    	public static void settaggioProxyDue ()
    	{
    		
    		
    		
    		
    	}
    
    
    	
    }
    ci sono diverse classi, interfaccia è un oggetto della classe Grafica e il controller corrente (inizializzato in una classe Main che contiene solo il main(), si autoassegna alla classe grafica. Poi riceve i dati con l'apposito metodo dall'oggetto riceviDati. Qui si ferma il codice, quando viene premuto il bottone "LEGGI CON PROXY 1" dalla classe grafica si attiva il metodo della sottoclasse Buttonlisteners che implementa gli Actionlistener, alla pressione di quel bottone è richiamatoil metodo letturaProxyUno del controller, che però dà errore alla riga
    interfaccia.aggiornaGrafica(name, surname, interests);
    perchè l'array di label su cui settare il testo è nullo.... e nessuno ha fatto niente per annullarlo.... almeno credo

  8. #8
    ci sta sfuggendo qualcosa. Riesci a fare un zippettino del progetto da linkare da qualche parte?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    9
    scusate il doppio post, ma l'array è già nullo prima che venga cliccato il bottone e si attivi il listener..

    codice:
    class ButtonListener implements ActionListener
    	{
    		
    		public void actionPerformed(final ActionEvent e) 
    		{
    			//tramite questa variabile identifico il bottone premuto, estraendone il source
    			//
    			final JButton tastoPremuto= (JButton)e.getSource();
    			  
    			
    
    			
    					if ( tastoPremuto.getText()== "LEGGI CON PROXY 1") 
    						
    						controlInGrafica.letturaProxyUno();
    					/*
    					else if ( tastoPremuto.getText()== "LEGGI CON PROXY 2")
    						controlInGrafica.letturaProxyDue();			
    					else if ( tastoPremuto.getText()== "SETTA CON PROXY 1")
    						   controlInGrafica.settaggioProxyUno();				
    					else if ( tastoPremuto.getText() == "SETTA CON PROXY 2")
    						controlInGrafica.settaggioProxyDue();
    		*/
    		}
    	}
    come se si annullasse dopo il costruttore.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    9
    anto ti ringrazio davvero moltissimo della disponibilità...

    ti linko lo zip:

    http://hotfile.com/dl/83210328/2c528...flect.zip.html

    grazie davvero anche solo x l'interesse

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.