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

    Applet non aggiorna JLabel

    Ciao, ho a disposizione due classi distinte (ciascuna in nel proprio file .java):
    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class AppletTemperatura extends JApplet {
    	
    	private JPanel pannello;
    	private JLabel etichetta;
    	private JTextField campo;
    	private JComboBox combo;
    	private JButton pulsante;
    	private static JLabel risultato;
    	
    	public void init() {
    		pannello = new JPanel();
    		etichetta = new JLabel("Inserisci la temperatura qui accanto: ");
    		campo = new JTextField(10);
    		campo.setHorizontalAlignment(JTextField.RIGHT);
    		combo = new JComboBox();
    		combo.setEditable(false);
    		combo.addItem("Celsius in Kelvin");
    		combo.addItem("Celsius in Fahrenheit");
    		combo.addItem("Kelvin in Celsius");
    		combo.addItem("Kelvin in Fahrenheit");
    		combo.addItem("Fahrenheit in Celsius");
    		combo.addItem("Fahrenheit in Kelvin");
    		pulsante = new JButton("Converti");
    		risultato = new JLabel("Risultato: ");
    		pannello.add(etichetta);
    		pannello.add(campo);
    		pannello.add(combo);
    		pannello.add(pulsante);
    		pannello.add(risultato);
    		this.setContentPane(pannello);
    		pulsante.addMouseListener(new Ascoltatore(campo, combo, risultato));
    	}
    	
    	public static void aggiornaRisultato(JLabel risultatoPassato) {
    		risultato = risultatoPassato;
    		risultato.validate();
    	}	
    
    }
    e questa classe che gestisce il JButton
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    import java.awt.event.*;
    
    public class Ascoltatore extends MouseAdapter {
    	
    	private JTextField campo;
    	private JComboBox combo;
    	private JLabel risultatoEtichetta;
    	private double dato, risultato;
    	
    	public Ascoltatore(JTextField campoPassato, JComboBox comboPassato, JLabel risultatoPassato) {
    		campo = campoPassato;
    		combo = comboPassato;
    		risultatoEtichetta = risultatoPassato;
    	}
    	
    	public void mouseClicked(MouseEvent oggettoEvento) {
    		try {
    			if((combo.getSelectedItem().toString()).equalsIgnoreCase("Celsius in Kelvin")==true) {
    				dato = Double.parseDouble(campo.getSelectedText());
    				risultato = ConversioneTemperatura.celsiusInKelvin(dato);
    				risultatoEtichetta.setText("Risultato: " + risultato);
    				AppletTemperatura.aggiornaRisultato(risultatoEtichetta);
    			}
    		} catch(Throwable e) {}
    		
    	}
    
    }
    Il problema che una volta inserita la temperatura e cliccato sul pulsante, non si aggiorna la JLabel "Risultato". Navigando in rete ho trovato l'istruzione "validate()" ma sembra non fare niente. Come potrei fare? Grazie mille!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'evento del clic sul pulsante non va gestito con un MouseListener (e relativo mouseClicked() ), ma con un ActionListener (e relativo actionPerformed() ).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Originariamente inviato da LeleFT
    L'evento del clic sul pulsante non va gestito con un MouseListener (e relativo mouseClicked() ), ma con un ActionListener (e relativo actionPerformed() ).


    Ciao.
    Scusa, non ho capito bene come dovrei fare e quale punto modificare...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Power Dragon
    Scusa, non ho capito bene come dovrei fare e quale punto modificare...
    Nella prima classe:

    codice:
    pulsante.addActionListener(new Ascoltatore(campo, combo, risultato));
    La seconda classe non dovrà estendere MouseAdapter, ma implementare ActionListener e al posto di ridefinire il metodo mouseClicked() dovrai ridefinire il metodo actionPerformed(ActionEvent ae).

    Vediti la documentazione dell'interfaccia java.awt.event.ActionListener.

    PS: queste sono le basi che più basilari non si può per la gestione delle GUI in Java. Consiglio di seguire il tutorial di Oracle How to Use Buttons, Check Boxes, and Radio Buttons

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da LeleFT
    Nella prima classe:

    codice:
    pulsante.addActionListener(new Ascoltatore(campo, combo, risultato));
    La seconda classe non dovrà estendere MouseAdapter, ma implementare ActionListener e al posto di ridefinire il metodo mouseClicked() dovrai ridefinire il metodo actionPerformed(ActionEvent ae).

    Vediti la documentazione dell'interfaccia java.awt.event.ActionListener.

    PS: queste sono le basi che più basilari non si può per la gestione delle GUI in Java. Consiglio di seguire il tutorial di Oracle How to Use Buttons, Check Boxes, and Radio Buttons

    Ciao.
    Ciao, ho appena provato ma ancora non aggiorna niente! Alcune volte Java è odioso!
    Ti pongo qui il codice se vuoi e puoi dare un'occhiata:
    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class AppletTemperatura extends JApplet {
    	
    	private JPanel pannello;
    	private JLabel etichetta;
    	private JTextField campo;
    	private JComboBox combo;
    	private JButton pulsante;
    	private static JLabel risultato;
    	
    	public void init() {
    		pannello = new JPanel();
    		etichetta = new JLabel("Inserisci la temperatura qui accanto: ");
    		campo = new JTextField(10);
    		campo.setHorizontalAlignment(JTextField.RIGHT);
    		combo = new JComboBox();
    		combo.setEditable(false);
    		combo.addItem("Celsius in Kelvin");
    		combo.addItem("Celsius in Fahrenheit");
    		combo.addItem("Kelvin in Celsius");
    		combo.addItem("Kelvin in Fahrenheit");
    		combo.addItem("Fahrenheit in Celsius");
    		combo.addItem("Fahrenheit in Kelvin");
    		pulsante = new JButton("Converti");
    		risultato = new JLabel("Risultato: ");
    		pannello.add(etichetta);
    		pannello.add(campo);
    		pannello.add(combo);
    		pannello.add(pulsante);
    		pannello.add(risultato);
    		this.setContentPane(pannello);
    		pulsante.addActionListener(new Ascoltatore(campo, combo, risultato));
    	}
    	
    	public static void aggiornaRisultato(JLabel risultatoPassato) {
    		risultato = risultatoPassato;
    		risultato.validate();
    	}	
    
    }
    codice:
    public class Ascoltatore implements ActionListener {
    	
    	private JTextField campo;
    	private JComboBox combo;
    	private JLabel risultatoEtichetta;
    	private double dato, risultato;
    	
    	public Ascoltatore(JTextField campoPassato, JComboBox comboPassato, JLabel risultatoPassato) {
    		campo = campoPassato;
    		combo = comboPassato;
    		risultatoEtichetta = risultatoPassato;
    	}
    	
    	public void actionPerformed(ActionEvent oggettoEvento) {
    		try {
    			if((combo.getSelectedItem().toString()).equalsIgnoreCase("Celsius in Kelvin")==true) {
    				dato = Double.parseDouble(campo.getSelectedText());
    				risultato = ConversioneTemperatura.celsiusInKelvin(dato);
    				risultatoEtichetta.setText("Risultato: " + risultato);
    				AppletTemperatura.aggiornaRisultato(risultatoEtichetta);
    			}
    		} catch(Throwable e) {}
    		
    	}
    
    }
    Grazie anche dei consigli!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Potrebbero verificarsi delle eccezioni, ma con il tuo codice le stai ammazzando.

    Modifica così la clausola catch:

    codice:
    } catch(Exception e) { e.printStackTrace(); }
    quindi verifica (nella Java Console) se vengono sollevate eccezioni, eventualmente quali e dove.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Trovato l'errore: ho messo ".getSelectedText()" invece di ".getText()" quindi:
    -> non prendeva la temperatura inserita
    -> non veniva lanciata nessuna eccezione
    -> non aggiornava la JLabel

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.