Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema con java!

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    3

    Problema con java!

    Ciao a tutti, avrei bisogno di inserire un if che mi controlli che nell'area di testo vengano inseriti solo numeri e non caratteri, e che qualora se ne si inseriscano, mi dia una finestra di messaggio. Grazie per l'aiuto!

    /**
    * questi pacchetti contengono le componenti per la gestione delle finestre e degli eventi
    */
    import javax.swing.*;
    import java.awt.event.*;
    public class RifaccioMedia2 {

    public static void main (String[] args) {


    /**
    *Costruisco una finestra e permetto che la JVM si possa fermare (parametro exit_on_close)
    */
    JFrame finestra = new JFrame("Calcolo la media di due numeri, anche a virgola mobile");
    finestra.setDefaultCloseOperation(JFrame.EXIT_ON_C LOSE);


    /**
    *Costruisco un pannello; setlayout crea l'interfaccia e l'oggetto boxlayout la disposizione, che posso variare.
    */
    JPanel pannello = new JPanel();
    pannello.setLayout(new BoxLayout(pannello, BoxLayout.Y_AXIS));

    /**
    *showmessagedialog è un metodo della classe joptionpane che mi crea una finestra di dialogo "preconfezionata"
    */
    JOptionPane.showMessageDialog( null, "Benvenuto nel programma di calcolo della media di due numeri creato da Francesco" );

    if (PrimoNumero == char ) {
    JOptionPane.showMessageDialog( null, "Puoi inserire solo numeri interi o con la virgola, non caratteri" );
    }

    /**
    *Costruisco una scritta ed un'area di testo e li aggiungo al pannello
    */
    JLabel PrimoNumerolabel = new JLabel("Primo numero:");
    final JTextField PrimoNumero = new JTextField(50);
    pannello.add(PrimoNumerolabel);
    pannello.add(PrimoNumero);

    /**
    *Costruisco una scritta ed un'area di testo e li aggiungo al pannello (per il secondo numero)
    */
    JLabel SecondoNumerolabel = new JLabel("Secondo numero:");
    final JTextField SecondoNumero = new JTextField(50);
    pannello.add(SecondoNumerolabel);
    pannello.add(SecondoNumero);

    /**
    *Costruisco un bottone e lo aggiungo al pannello
    */
    JButton pulsOk = new JButton("OK");
    pannello.add(pulsOk);

    /**
    *Costruisco una scritta ed un'area di testo e li aggiungo al pannello (per il risultato)
    */
    JLabel RisultatoLabel = new JLabel("Risultato:");
    final JTextField Risultato = new JTextField(50);
    pannello.add(RisultatoLabel);
    pannello.add(Risultato);



    /**
    *Questa classe implementa l'actionlistener contenuto nel pacchetto java.awt.event
    */
    class Media implements ActionListener{
    /**
    * All'interno di questa classe, implemento actionperformed per dire "cosa fare" una volta intercettata la pressione del pulsante
    */
    public void actionPerformed (ActionEvent event) {
    String fromUser = PrimoNumero.getText();
    String fromUser2 = SecondoNumero.getText();


    double n1 = Double.parseDouble(fromUser);
    double n2 = Double.parseDouble(fromUser2);
    double media = (n1 + n2) / 2 ;
    String calcola = "";
    String risultato = calcola.format("%.2f", media); // %.2f mette la virgola ai decimali
    Risultato.setText(risultato); //mette il totale in risultato
    }
    }

    /**
    *Creo un istanza di actionlistener ed aggiungo pulsOK (che contiene un oggetto jbutton). Il tipo della variabile listener può essere Media perchè implementa actionlistener
    */

    ActionListener listener = new Media();

    pulsOk.addActionListener(listener);
    finestra.setContentPane(pannello);
    finestra.pack();//Assegna le dimensioni minime sufficienti a mostrare tutto il contenuto della finestra
    finestra.setVisible(true);
    }
    }

  2. #2
    puoi ragionare in due modi:

    1) (consigliato) Assegni al tuo JTextField un Document personalizzato che evita proprio l'inserimento di caratteri che non siano una cifra oppure la virgola decimale

    2) Effettui il controllo nella ActionPerformed sui due JTextField utilizzando le espressioni regolari:

    codice:
    String fromUser = PrimoNumero.getText();
    String fromUser2 = SecondoNumero.getText();
    Pattern p = Pattern.compile(""^[0-9]*[\\.|,][0-9]+$"");   //considera la possibilità di inserire o il punto o la virgola come separatore dei decimali
            
    Matcher m1 = p.matcher(fromUser);
    Matcher m2 = p.matcher(fromUser2);
    if(m1.find() && m2.find()){
                //...esegui codice
    }else{
         JOptionPane.showMessageDialog( null, "Puoi inserire solo numeri interi o con la virgola, non caratteri" );
    }
    Al mio segnale... scatenate l'inferno!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Leggi il regolamento per conoscere le regole di scrittura dei titoli.
    Mi pare ovvio che se posti un problema nella sezione Java del forum, tu abbia una problema con Java. Questo non chiarisce affatto il tuo problema.

    Qui chiudo.


    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

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.