Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [Java]Gui Eventi

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136

    [Java]Gui Eventi

    Salve a tutti,
    ho scritto questo piccolo esempio:

    codice:
    //Questo esempio dimostra come sia possibile non usare le classi interne per gestire gli eventi.
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class ColorPanelFrame_2{
    	public static void main(String[] args){
    		ButtonFrame frame=new ButtonFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
    }
    
    class ButtonFrame extends JFrame{
    	public ButtonFrame(){
    		setTitle("Color Test");
    		setSize(Def_W,Def_H);
    
    		ButtonPanel bp=new ButtonPanel();
    		add(bp);
    	}
    	private static final int Def_W=400;
    	private static final int Def_H=300;
    }
    
    class ButtonPanel extends JPanel implements ActionListener{
    	
    	public ButtonPanel(){
    		//creo i pulsanti
    		JButton yButton=new JButton("Yellow");
    		JButton rButton=new JButton("Red");
    		JButton bButton=new JButton("Blue");
    
    		//aggiungo i pulsanti al Panello
    		add(yButton);
    		add(rButton);
    		add(bButton);
    		
    		//aggiungo l'oggetto listener alla sorgente dell'evento
    		yButton.addActionListener(this);
    		rButton.addActionListener(this);
    		bButton.addActionListener(this);
    	
    	}
    	//Listner di azioni che imposta il colore di sfondo del Pannel
    	public void actionPerformed(ActionEvent e){
    		JButton o=(JButton)e.getSource();
    		if( o==yButton ){
    			System.out.println("Yellow button");
    			setBackground(Color.YELLOW);
    		}
    		else{
    			if( o==bButton ){
    				System.out.println("Blue button");
    				setBackground(Color.BLUE);
    			}
    			else{
    				if( o==rButton ){
    				System.out.println("Red button");
    				setBackground(Color.RED);
    				}
    			}
    		}
    	}
    	
    	private JButton yButton;
    	private JButton rButton;
    	private JButton bButton;
    }
    Quando clicco su un bottone il pannello non cambia il colore di sfondo come io vorrei che facesse.Dove sbaglio?SAluti.

    P.S.so che è possibile usare una classe interna.questo è solo un esercizio per rendermi conto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Perchè dichiararei bottoni nei campi di istanza, e poi dichiararli di nuovo nel costruttore?
    Così facendo stai ascoltando la pressione sui bottoni all'interno del costruttore. All'esterno del costruttore hai dei bottoni che non sono nemmeno inizializzati. L'if restituirà sempre falso insomma.

    codice:
    //Questo esempio dimostra come sia possibile non usare le classi interne per gestire gli eventi.
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    class ColorPanelFrame{
    	public static void main(String[] args){
    		ButtonFrame frame=new ButtonFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
    }
    
    class ButtonFrame extends JFrame{
    	public ButtonFrame(){
    		setTitle("Color Test");
    		setSize(Def_W,Def_H);
    
    		ButtonPanel bp=new ButtonPanel();
    		add(bp);
    	}
    	private static final int Def_W=400;
    	private static final int Def_H=300;
    }
    
    class ButtonPanel extends JPanel implements ActionListener{
        private JButton yButton;
    	private JButton rButton;
    	private JButton bButton;
    	
    	public ButtonPanel(){
    		//creo i pulsanti
    		yButton=new JButton("Yellow");
    		rButton=new JButton("Red");
    		bButton=new JButton("Blue");
    
    		//aggiungo i pulsanti al Panello
    		add(yButton);
    		add(rButton);
    		add(bButton);
    		
    		//aggiungo l'oggetto listener alla sorgente dell'evento
    		yButton.addActionListener(this);
    		rButton.addActionListener(this);
    		bButton.addActionListener(this);
    	
    	}
    	//Listner di azioni che imposta il colore di sfondo del Pannel
    	public void actionPerformed(ActionEvent e){
    		JButton o=(JButton)e.getSource();
    		if( o==yButton ){
    			System.out.println("Yellow button");
    			setBackground(Color.YELLOW);
    		}
    		else{
    			if( o==bButton ){
    				System.out.println("Blue button");
    				setBackground(Color.BLUE);
    			}
    			else{
    				if( o==rButton ){
    				System.out.println("Red button");
    				setBackground(Color.RED);
    				}
    			}
    		}
    	}
    	
    
    }

    Sarebbe meglio indicare le variabili ad inizio classe, non al termine. Se li dichiari a prima vista non so che stai facendo su quelle variabili, è decisamente più scomodo.

    Comunque esiste il costrutto else if
    codice:
    if(condizione) {
    
    }
    else if(altra_condizione) {
    
    }
    else if(altra_condizione) {
    
    }
    .....
    else {
    
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136
    Ok risolto,grazie dei consigli.Saluti.

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.