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

    Passare evento da un pannello ad un altro

    Salve, io ho un problema e non so come posso risolvere.
    In pratica sto costruendo un editor di Livello.
    Io ho un Frame su cui disegno 2 pannelli, Il primo che si chiama Oggetti contiene dei bottoni che rappresentano gli oggetti da disegnare sull'altro pannello.
    Il secondo che si chiama "Pannello" e dove vado a disegnare gli oggetti.
    Come posso fare per passare l'evento della pressione del mouse da un pannello ad un altro???
    E poi dove attacco il MouseListener???(nel Frame,nel pannello Oggetto, oppure in Pannello)???

    Allego codice frame
    codice:
    public class FrameEditor1 extends JFrame {
    	String frameTitle = "Editor Flying Monkey vers. 1.0";
    	JPanel pannello;
        JPanel oggetti;
        JPanel barra;
    public FrameEditor1() {
    		 	super();
    	        this.setTitle(frameTitle);
    	        this.setSize(Costanti.WIDTH,Costanti.HEIGHT );  //dimensioni della finestra
    			//this.setUndecorated(true);//non fa vedere i bottoni di ridimensionamento e chiusura
    	       // this.setResizable(false);
    	        this.setLayout(new BorderLayout());
    	        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    	        setLocationRelativeTo(null);//centra la finestra
    	        oggetti= new Oggetti();
    	        barra= new Barra();
    	        pannello =new Pannello();
    			this.add(oggetti,BorderLayout.WEST);
    			this.add(barra,BorderLayout.NORTH);
    			this.add(new JScrollPane(pannello),BorderLayout.CENTER);
    			
    		}
    
    }
    Pannello Oggetto:

    codice:
    public class Oggetti extends JPanel {
    	private GestioneImmagini gm;
    	private JButton scimmia;
    	private JButton uccello;
    	private JButton difesa;
    	private JButton palla;
    	private JButton banana;
    	private JButton casco;
    	private JButton ananas;
    	private JButton fulmine;
    	private JButton cento;
    	private JButton trecento;
    	private JLabel oggetto;
    	private JPanel oggetti;
    	public Oggetti () {
    		gm=new GestioneImmagini();
            ImageIcon ico5 =new ImageIcon(gm.getImmagineuccellof());
            ImageIcon ico3 =new ImageIcon(gm.getImmaginepalla());
            ImageIcon ico4 =new ImageIcon(gm.getImmaginefaccia());
            ImageIcon ico6 =new ImageIcon(gm.getImmaginebananae());
            ImageIcon ico7 =new ImageIcon(gm.getImmagineananas());
            ImageIcon ico8 =new ImageIcon(gm.getImmaginefulmine1());
            ImageIcon ico9 =new ImageIcon(gm.getImmaginecasco());
            ImageIcon ico10 =new ImageIcon(gm.getImmaginedifesae()); 
            ImageIcon ico11 =new ImageIcon(gm.getImmaginep100());
            ImageIcon ico12 =new ImageIcon(gm.getImmaginep300());
            
            this.setLayout(new BorderLayout());
            
            oggetto=new JLabel();
            oggetto.setText("         Oggetti:     ");
            oggetto.setFont(new Font("Arial",Font.BOLD,22));
            
            this.add(oggetto,"North");
            
            oggetti=new JPanel();
            oggetti.setLayout(new GridLayout(5,2));
            
            
            scimmia=new JButton();
            scimmia.setMargin (new Insets (0, 0, 0, 0));
    		scimmia.setContentAreaFilled(false);
            scimmia.setIcon(ico4);
            scimmia.setPressedIcon(ico4);
            scimmia.setBorderPainted(false);
            scimmia.setMargin (new Insets (0, 0, 0, 0));
            scimmia.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            scimmia.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
    		oggetti.add(scimmia);
    		
            uccello=new JButton();
            uccello.setMargin (new Insets (0, 0, 0, 0));
    		uccello.setContentAreaFilled(false);
            uccello.setIcon(ico5);
            uccello.setPressedIcon(ico5);
            uccello.setBorderPainted(false);
    		uccello.setMargin (new Insets (0, 0, 0, 0));
    		uccello.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
    		uccello.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
    		oggetti.add(uccello);
    		
            difesa=new JButton();
            difesa.setMargin (new Insets (0, 0, 0, 0));
            difesa.setContentAreaFilled(false);
            difesa.setIcon(ico10);
            difesa.setPressedIcon(ico10);
            difesa.setBorderPainted(false);
            difesa.setMargin (new Insets (0, 0, 0, 0));
            difesa.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            difesa.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
            oggetti.add(difesa);
            
            palla=new JButton();
            palla.setMargin (new Insets (0, 0, 0, 0));
    		palla.setContentAreaFilled(false);
            palla.setIcon(ico3);
            palla.setPressedIcon(ico3);
            palla.setBorderPainted(false);
            palla.setMargin (new Insets (0, 0, 0, 0));
            palla.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            palla.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
    		oggetti.add(palla);
    		
            banana=new JButton();
            banana.setMargin (new Insets (0, 0, 0, 0));
    		banana.setContentAreaFilled(false);
            banana.setIcon(ico6);
            banana.setPressedIcon(ico6);
            banana.setBorderPainted(false);
            banana.setMargin (new Insets (0, 0, 0, 0));
            banana.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            banana.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
    		oggetti.add(banana);
    		
            casco=new JButton();
            casco.setMargin (new Insets (0, 0, 0, 0));
            casco.setContentAreaFilled(false);
            casco.setIcon(ico9);
            casco.setPressedIcon(ico9);
            casco.setBorderPainted(false);
            casco.setMargin (new Insets (0, 0, 0, 0));
            casco.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            casco.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
            oggetti.add(casco);
            
            ananas=new JButton();
            ananas.setMargin (new Insets (0, 0, 0, 0));
    		ananas.setContentAreaFilled(false);
            ananas.setIcon(ico7);
            ananas.setPressedIcon(ico7);
            ananas.setBorderPainted(false);
            ananas.setMargin (new Insets (0, 0, 0, 0));
            ananas.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            ananas.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
    		oggetti.add(ananas);
    		
            fulmine=new JButton();
            fulmine.setMargin (new Insets (0, 0, 0, 0));
    		fulmine.setContentAreaFilled(false);
            fulmine.setIcon(ico8);
            fulmine.setPressedIcon(ico8);
            fulmine.setBorderPainted(false);
            fulmine.setMargin (new Insets (0, 0, 0, 0));
            fulmine.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            fulmine.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
    		oggetti.add(fulmine);
    		
            cento=new JButton();
            cento.setMargin (new Insets (0, 0, 0, 0));
            cento.setContentAreaFilled(false);
            cento.setIcon(ico11);
            cento.setPressedIcon(ico11);
            cento.setBorderPainted(false);
            cento.setMargin (new Insets (0, 0, 0, 0));
            cento.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            cento.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
            oggetti.add(cento);
            
            trecento=new JButton();
            trecento.setMargin (new Insets (0, 0, 0, 0));
            trecento.setContentAreaFilled(false);
            trecento.setIcon(ico12);
            trecento.setPressedIcon(ico12);
            trecento.setBorderPainted(false);
            trecento.setMargin (new Insets (0, 0, 0, 0));
            trecento.setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR));
            trecento.setToolTipText("Premi il bottone per selezionare l'elemento corrente");
            oggetti.add(trecento);
            
            this.add(oggetti,"Center");
            
    	}
    
    }
    Pannello "Pannello":

    codice:
    public class Pannello extends JPanel implements Runnable   {
    	private GestioneImmagini gm;
    	public Pannello() { 
    	        new Thread(this).start();
    	        gm=new GestioneImmagini();
    	        setPreferredSize(new Dimension(Costanti.N*Costanti.CELLA,Costanti.HEIGHTGAME));
    	  }
    	public void disegna(Graphics g) {
    		int indicemin=0;
    		for (int i=0;i<Costanti.CELLA;i++) {
    		g.drawImage(gm.getImmaginecielo(), indicemin,0,Costanti.WIDTH,Costanti.HEIGHTGAME,this);
    		g.drawImage(gm.getImmaginemontagne(), indicemin,Costanti.HEIGHT-Costanti.HEIGHTMONTAGNE,Costanti.WIDTH,Costanti.HEIGHTMONTAGNE,this);
    		g.drawImage(gm.getImmagineprato(), indicemin,Costanti.HEIGHT-Costanti.HEIGHTPRATO,Costanti.WIDTH,Costanti.HEIGHTPRATO,this);
    		indicemin+=Costanti.WIDTH;
    		}
    
    		
    		
    		for(int x=0; x<=Costanti.N*Costanti.CELLA; x=x+Costanti.CELLA) {
    		      g.drawLine(x, 0, x, Costanti.M*Costanti.CELLA);
    		    }
    
    		    /* disegna le linee orizzontali */
    		    for(int y=0; y<=Costanti.M*Costanti.CELLA; y=y+Costanti.CELLA) {
    		      g.drawLine(0, y, Costanti.N*Costanti.CELLA, y);
    		    }
    
    
    }
    	public void paintComponent(Graphics g){
    			super.paintComponent(g);		
    			disegna(g);
    	}
    	public GestioneImmagini getgm() {
    		   return gm;
    	}
    	   
    	public void run() {
    			while (true) {
    				repaint();
    				try {
    					Thread.sleep(100);
    				} 
    				catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    	}
    }

  2. #2
    Nessuno sa come aiutarmi???

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    cosa è un evento se non un'istanza di una classe? Banalmente dal listener chiami un metodo sul pannello destinatario con parametro l'evento che hai.
    Non farti fuorviare dal fatto che si parli di eventi, è sempre istanza di una classe e come tale è trattata.
    Ovviamente il pannello source deve avere un riferimento al pannello destination

    Perdonami, non ho letto tutto il tuo codice, ma solo l'esposizione del problema

  4. #4
    In pratica mi dici di creare un riferimento del pannello in cui vado a disegnare nel pannello in cui si genera l'evento.
    Il problema è che l'evento è anche nel pannello di destinazione.

    Mi spiego meglio quando clicco su un bottone si attiva un evento che si conserva il tipo di bottone che è (questo l'ho gia fatto, vedi codice sotto); Quando clicco sul secondo pannello in una posizione qualsiasi mi deve disegnare il tipo del bottone.
    Come fare???

    codice:
    scimmia.addActionListener(new ActionListener() {
    			   
                public void actionPerformed(ActionEvent actionevent)
                {
                    tipo=Costanti.NSCIMMIA;
                }
     });
    dove scimmia è un bottone, e tipo è una stringa in cui vado a scrivere l'oggetto da disegnare

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Riordina le idee:

    tu avrai un metodo di cui ti dò una prima forma di signature

    codice:
    public void gestioneEvento(ActionEvent event);
    all'interno del pannello destinazione.

    Dal pannello sorgente puoi direttamente chiamare questo metodo (che è comodo).
    Dal pannello destinazione, il listener chiama questo metodo.

    Come vedi la stessa gestione riesco a chiamarla da due punti differenti (e non devi impazzire a sistemare roba).

  6. #6
    Spero di aver capito bene.
    Nell'evento del pannello source richiamo la funzione gestione evento, In questa funzione vado a vedere il tipo di oggetto che è, e controllo se c'è stato un click nel pannello di destinazione, se così è gli dico di diseganre l'oggetto in questa posizione.
    Quindi nel pannello di destinazione ho bisogno di un mouse listener che si prenda la posizione in cui mi trovo disegni.
    Ho capito bene???

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.