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

    [JAVA] [metodo actionPerformed]

    Salve gente, ho bisogno del vostro aiuto!!

    Vorrei creare una classe che mi crea un pannello con un TextField e un bottone il cui evento dovrebbe avviare una procedura esterna alla classe che mi crei dei file (ma questo lato non importa ora).

    Il problema è che io vorrei, una volta creata la mia classe che implementa ActionListener, impostare il metodo actionPerformed(ActionEvent event) in modo tale da non restituire un void ma un valore che poi dovrei controllare a parte.

    Questo è il mio codice che mi da errori:

    codice:
    import java.awt.*;
    import java.io.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    public class creaPannello extends JPanel
    {
    
    	public creaPannello()
    	{
    		frame = new JFrame();
    		panel = new JPanel();
    		campo = new JTextField(5);
    		label = new JLabel("Inserisci qui la matricola");
    		button = new JButton("Invia");
    		panel.add(label);
    		panel.add(campo);
    		panel.add(button);
    		frame.setContentPane(panel);
    		frame.show();
    
    		buttonPress listener = new buttonPress();
    		valore = button.addActionPerformed(listener);
    		setValore(valore);
    
    	}
    	class buttonPress implements ActionListener
    	       {
    		public String actionPerformed(ActionEvent event) //Si può fare così??
    			{
    				String input = campo.getText();
    				return input;
    			}
    		}
    
    
    
    	public void setValore(String valore)
    	{
    		matricola = valore;
    	}
    
    	public String getValore()
    	{
    		return matricola;
    	}
    
    private String matricola;
    private String valore;
    private JFrame frame;
    private JPanel panel;
    private JTextField campo;
    private JLabel label;
    private JButton button;
    }
    Spero di essere stato chiaro nel dubbio che mi pongo.
    Vi prego tanto di lavorare sul mio progetto e non di crearne un altro.

    Grazie 1000!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non è l'uso corretto di actionPerformed...

    Dovresti piuttosto prevedere che cosa faranno i tuoi bottoni. Dichiara la variabile/oggetto che vuoi aggiornare al di fuori di actionPerformed, e alla pressione del bottone metti il valore che desideri nella variabile/oggetto.

    Ah, usa anche metodi non deprecati: per mostrare un componente sarebbe meglio utilizzare .setVisible(true);

    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Si grazie ho provato e funzione; è giusto quello che dici su actionPerformed.

    Però c'è una cosa che ancora non capisco....

    Quando io creo un ricevitore di eventi...questo ricevitore non dovrebbe aspettare che gli si mandi un evento( tipo pressione di un bottone dal pannello) ?

    Ti faccio questa domanda perchè nel mio caso (particolare) mi va in loop e crea infiniti pannelli uno dietro l'altro senza neanche aspettare che prema il bottone.

    in realtà il mio programma dovrebbe fare questo:

    Dovrebbe far apparire un pannello con un TextField e un bottone.
    Nel textfield devo inserire un numero e inviarlo ad un'altra classe esterna che lo elabora tramite il bottone.

    Però prima di mandare il valore volevo inserire un eccezione in cui verifico se l'input è un numero o una stringa, nel caso in cui è una stringa ricrea il pannello.

    Ora il problema è che a me non aspetta che io gli dia un evento ma incomincia a creare infiniti pannelli...
    Lo so che detto così è difficile capire qual'è il problema...ma puoi avere almeno un idea su cosa di sbagliato sto facendo che mi determina il cattivo funzionamento?!?

  4. #4
    Ti faccio vedere lo script per intero delle due classi:

    Primo file:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    
    
    
    public class TestCertificato
    {
    	public static void main(String[] args) throws NumberFormatException, IOException
    	{
    
    		boolean controllo = false;
    		String input = null;
    		while(!controllo){
    
    			creaPannello panel = new creaPannello();
    
    			try{
    
    
    				int matricola = Integer.parseInt(input);
    				controllo = true;
    				}
    
    			catch (NumberFormatException exception)
    				{
    				System.out.println("La matricola non e' un valore valido; riprova");
    
    				}
    
    						}
    		stampaCertificato certificato = new stampaCertificato(input);
    		System.exit(0);
    
    	}
    
    
    }

    Secondo file:

    codice:
    import java.awt.*;
    import java.io.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    public class creaPannello extends JPanel
    {
    
    	public creaPannello()
    	{
    		frame = new JFrame();
    		panel = new JPanel();
    		campo = new JTextField(5);
    		label = new JLabel("Inserisci qui la matricola");
    		button = new JButton("Invia");
    
    
    		ActionListener listener = new buttonPress();
    		button.addActionListener(listener);
    
    		panel.add(label);
    		panel.add(campo);
    		panel.add(button);
    		frame.setContentPane(panel);
    		frame.pack();
    		frame.show();
    
    	}
    
    		class buttonPress implements ActionListener
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				valore = campo.getText();
    			}
    		}
    
    	public String getValore()
    	{
    		return valore;
    	}
    
    
    
    private JFrame frame;
    private JPanel panel;
    private JTextField campo;
    private JLabel label;
    private JButton button;
    private String valore;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non voglio stravolgere il tuo lavoro... c'è solo un piccolo problema di fondo: usi componenti in modo errato... per quello che vuoi fare tu, il componente ideale ed esistente (al limite lo estendi e personalizzi come meglio credi...) è JDialog.

    C'è un altro problema grosso nella logica del tuo programma: la condizione del while altro non è che while(true) e ti credo che si aprono milioni di creaPannello....

    Ti conviene ripensare un po' alla struttura del programma, ed implementare quella funzionalità via JDialog.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Si si, infatti ho rivisto tutto e ho tolto anche il while, perchè non serviva.
    Ora va tutto molto bene.
    Ora mi si pone un altro problema, dovrei invocare dei metodi per la stampa da stampante. Tu per caso sai come fare per stampare tramite bottone dei dati testuali ?

    Grazie...

  7. #7
    se lo sai e puoi completare questo codice sarebbe per me il massimo...



    codice:
    .........;
    .........;
    
    class evento_stampa implements ActionListener
    				{
    					public void actionPerformed(ActionEvent event)
    					{
    						..............
    							}
    
    					}
    				}
    
    				ActionListener listener2 = new evento_stampa();
    				button_stampa.addActionListener(listener2);

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 © 2024 vBulletin Solutions, Inc. All rights reserved.