Domanda

Ho un'applicazione di calcolo che ho bisogno di validare i campi per verificare se i valori immessi sono numeri numerici e non alfanumerico. Ho alcune idee circa i codici.
Si prega di guida a me se ho sbagliato qualcosa o sembrano niubbo come questo è la mia prima volta provare Swing.

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
    String text1 = jTextField1.getText();            // TODO add your handling code here:
}

private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
    String text2 = jTextField2.getText();        // TODO add your handling code here:
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    if (text1 and text2 != <numeric number>){
        JOptionPane.showConfirmDialog(null, "Please enter numbers only", "naughty", JOptionPane.CANCEL_OPTION);
    }
    // First we define float variables.
    float num1, num2, result;
    // We have to parse the text to a type float.
    num1 = Float.parseFloat(jTextField1.getText());
    num2 = Float.parseFloat(jTextField2.getText());
    // Now we can perform the addition.
    result = num1+num2;
    // We will now pass the value of result to jTextField3.
    // At the same time, we are going to
    // change the value of result from a float to a string.
    jTextField3.setText(String.valueOf(result));
    // TODO add your handling code here:
}

Si prega di fare aiuto. Tra l'altro perché il mio NetBeans tienimi informato che non riconosce il "JOptionPane" Comando?

È stato utile?

Soluzione

Float.parseFloat() lancerà una NumberFormatException se il String non è numerico e non può essere analizzato in un Float. È possibile aggiungere un blocco try-catch per verificare questa condizione:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    float num1, num2, result;

    try {
        num1 = Float.parseFloat(jTextField1.getText());
        num2 = Float.parseFloat(jTextField2.getText());
        result = num1+num2;
        jTextField3.setText(String.valueOf(result));

    } catch (NumberFormatException e) {
        JOptionPane.showConfirmDialog(null, "Please enter numbers only", "naughty", JOptionPane.CANCEL_OPTION);
    }
}

Altri suggerimenti

Se l'ingresso alfanumerico non è valida per il componente di oscillazione, in primo luogo, allora invece di convalidare questo post-entry, si dovrebbe limitare la componente di accettare solo determinato formato in primo luogo.

  

Utilizzando i formattatori che swing offre, è possibile impostare i campi di testo formattati per digitare date e numeri in formati localizzate. Un altro tipo di formattazione consente di utilizzare una maschera di carattere per specificare il set di caratteri che possono essere digitati in ogni posizione in campo. Ad esempio, è possibile specificare una maschera per digitare i numeri di telefono in un particolare formato, come ad esempio (XX) X-XX-XX-XX-XX.

Detto questo, è possibile, tra le altre cose, l'uso Integer.parseInt(String s) per vedere se una stringa arbitraria può essere analizzata in un int; il metodo genera NumberFormatException se può' t. Ci sono anche Double.parseDouble , ecc.

Vedi anche

Domande correlate

try {
    Integer.parseInt(foo);
} catch (NumberFormatException e) {
    // Naughty
}

Prova questo:

String temp = txtField.getText();
try 
  {
    int val = Integer.parseInt(temp);
  }
catch(NumberFormatException e) {
  System.out.println("Invalid");
 }

Per rendere più piacevole, utilizzare JOptionPane (rende più più interattivo)

textFieldCrDays = new JTextField();
    textFieldCrDays.addKeyListener(new KeyAdapter() {
        //// validate onlu numeric value
        public void keyTyped(KeyEvent e) {
            if (textFieldCrDays.getText().length() < 3 && e.getKeyChar() >='0' && e.getKeyChar() <= '9')
            {
                // Optional
                super.keyTyped(e);
            }
            else
            {
                // Discard the event
                e.consume();
            }
        }
    });

Un relativamente vecchia questione, ma ho pensato che vorrei prendere un colpo a esso, a forse aiutare le casuali Ricerche Google.

Un altro approccio che qualcuno potrebbe prendere per ridurre al minimo il codice e ridurre il numero di classi aggiuntive è quello di aggiungere un KeyListener per l'evento KeyType e verificare la presenza di Char di valore. Questo non è molto portabile (non è possibile utilizzare regione specifica formattazione, come la punteggiatura numerica), ma questo potrebbe essere molto utile per gli interi diritte. Si potrebbe anche fare una lunghezza relativa anche qui:

textField.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyTyped(KeyEvent keyEvent)
    {
        if (textField.getText().length() < 3 && keyEvent.getKeyChar() >= '0' && keyEvent.getKeyChar() <= '9')
        {
            // Optional
            super.keyTyped(keyEvent);
        }
        else
        {
            // Discard the event
            keyEvent.consume();
        }
    }
});

Si può anche aggiungere un altro listener di eventi per convalidare l'intero intero per ulteriori elaborazioni (l'intero numero deve essere> 800 e <5220, per esempio). Un buon posto per questo sarebbe sull'evento focusLost (?).

Se si sta facendo queste caratteristiche spesso, sarebbe meglio creare una sottoclasse della classe JTextField per fornire questa funzionalità.

EDIT:. Usando Character.isLetter(keyEvent.getKeyChar()) è ancora più chiaro

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top