Problema classe ascoltatori

di il
1 risposte

Problema classe ascoltatori

Buongiorno a tutti è la prima volto che posto qui, innanzitutto vorrei augurarvi buon natale e buone feste e soprattutto farvi i complimenti per questo sito fantastico.
Vi spiego il mio problema:
ho scritto le seguenti classi:
Classe di ascoltatori per interfaccia grafica.
package Ascoltatori;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import Interfaccia.Accesso;

import javax.swing.JLabel;

public class AscoltatoriAccesso implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent event) {
		JLabel marco = new JLabel("Marco");
		panel.add(marco);
	}

}
Classe dell'interfaccia grafica:
package Interfaccia;

import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import Ascoltatori.AscoltatoriAccesso;

public class Accesso extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public JPanel panel;
	private JLabel benvenuto;
	private JButton pulizie;
	private JButton segretario;
	private JButton professore;
	private JButton studente;
	private AscoltatoriAccesso ascoltatore;

	public Accesso(){
		JFrame accesso = new JFrame("Accesso");
		accesso.setDefaultCloseOperation(EXIT_ON_CLOSE);
		accesso.setVisible(true);
		accesso.setSize(new Dimension(500,400));
		panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		studente = new JButton("Studenti");
		professore = new JButton("Professore");
		segretario = new JButton("Addetto Segreteria");
		pulizie = new JButton("Addetto Manutenzione");
		benvenuto = new JLabel("Benvenuto, seleziona l'opzione adatta alla tua utenza");
		studente.setAlignmentX(CENTER_ALIGNMENT);
		professore.setAlignmentX(CENTER_ALIGNMENT);
		segretario.setAlignmentX(CENTER_ALIGNMENT);
		pulizie.setAlignmentX(CENTER_ALIGNMENT);
		benvenuto.setAlignmentX(CENTER_ALIGNMENT);
		studente.addActionListener(ascoltatore);
		panel.add(benvenuto);
		panel.add(studente);
		panel.add(professore);
		panel.add(segretario);
		panel.add(pulizie);
		accesso.add(panel);
		
	}

}
Classe main:
package Main;
import Interfaccia.Accesso;

public class Avvio {

	private static Accesso finestra;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		finestra = new Accesso();
	}

}
Adesso il problema è questo, premetto che uso eclipse per scrivere codice e compilare, nella classe degli ascoltatori alla voce panel mi da errore accanto dicendomi di crearne uno in locale, ma io voglio che modifichi il panel della classe Accesso e non un altro panel, che avendolo dichiarato public dovrebbe essere visto o sbaglio dalla classe degli ascoltatori.
Potreste aiutarmi a capire dove sbaglio? ...

1 Risposte

  • Re: Problema classe ascoltatori

    Ciao, il problema è che il campo "panel" è si pubblico, ma è un campo proprio delle istanze di Accesso. Di conseguenza potresti utilizzarlo facendo "finestra.panel.add(marco)", supponendo che finestra sia un oggetto di tipo Accesso.
    Dal momento che l'oggetto "finestra" non è però accessibile all'interno della classe "AscoltatoriAccesso", non è possibile utilizzare l'istruzione che ti ho descritto sopra. Una possibile soluzione potrebbe essere il passaggio dell'oggetto "panel" al momento della creazione dell'ascoltatore, nel modo seguente:
    
    public class AscoltatoriAccesso implements ActionListener {
    
       private JPanel panel;
    
       public AscoltatoriAccesso(JPanel panel){
            this.panel = panel;
       }
    
       @Override
       public void actionPerformed(ActionEvent event) {
          JLabel marco = new JLabel("Marco");
          panel.add(marco);
       }
    
    }
    
    public class Accesso extends JFrame {
       /**
        * 
        */
       private static final long serialVersionUID = 1L;
       public JPanel panel;
       private JLabel benvenuto;
       private JButton pulizie;
       private JButton segretario;
       private JButton professore;
       private JButton studente;
       private AscoltatoriAccesso ascoltatore;
    
       public Accesso(){
          JFrame accesso = new JFrame("Accesso");
          .....
          panel = new JPanel();
          ...... 
          ascoltatore = new AscoltatoriAccesso(panel);
          studente.addActionListener(ascoltatore);
          ....
       }
    }
    
    Facendo in questo modo potresti anche rendere privato o protetto il campo panel.
    
    Colgo l'occasione per augurare a tutti gli utenti del forum un felice Natale!! :)
    
Devi accedere o registrarti per scrivere nel forum
1 risposte