Solved

How do I make a pop up in Swing GUI if wrong data is entered in a text field.

Posted on 2009-04-06
5
337 Views
Last Modified: 2013-12-14
I try to make the input field accept only numbers preceded by a mathematical operator (+ - * /). for example: +7. if I enter just 7, it should pop up a window saying the same. I am using netbeans. Here is the Keypressed event code for you.
Please help me.
private void txtNumberKeyPressed(java.awt.event.KeyEvent evt) {                                     

        // KeyPressed handling code here:

        String badChar = "`!@#$[]\";%^&)~(_][{}|';:?|><,";

        char c = evt.getKeyChar();

        int keyCode = evt.getKeyCode();

        if(badChar.indexOf(c)>=0 || c <'0' && c>'9' || c >='a' && c <='z'

                || c >= 'A' && c <= 'Z' && keyCode != KeyEvent.VK_BACK_SPACE &&

                keyCode != KeyEvent.VK_ENTER)

        {

            evt.consume();

        }

        if(keyCode ==KeyEvent.VK_ENTER)

        {

            dataDisplay.append(txtNumber.getText()+ '\n');

            //now clear the textbox ready for next entry

            txtNumber.setText(null);

        }

    }

Open in new window

0
Comment
Question by:chandanchoubey
  • 2
  • 2
5 Comments
 
LVL 12

Assisted Solution

by:basav_com
basav_com earned 50 total points
ID: 24075667
0
 

Author Comment

by:chandanchoubey
ID: 24076162
Thanks for help basav_com. I tried using JOptionPane. It is giving me pop up. thats good. but it pops up even if I enter digits. I want pop should only appear when I enter text or not digits. please take a look of my code. What am I doing wrong?
Thanks for your help.
    private void txtNumberKeyPressed(java.awt.event.KeyEvent evt) {                                     

        // KeyPressed handling code here:

        String badChar = "`!@#$[]\";%^&)~(_][{}|';:?|><,";

        char c = evt.getKeyChar();

        int keyCode = evt.getKeyCode();

        if(badChar.indexOf(c)>=0 || c <'0' && c>'9' || c >='a' && c <='z'

                || c >= 'A' && c <= 'Z' && keyCode != KeyEvent.VK_BACK_SPACE &&

                keyCode != KeyEvent.VK_ENTER)

        {

            evt.consume();

        }
 

String goodChar = "1234567890+-/*";

        char d = evt.getKeyChar();

        if(keyCode ==KeyEvent.VK_ENTER)

            if(goodChar.indexOf(d) >=0 && goodChar.indexOf(d) <=14)

        {

                dataDisplay.append(txtNumber.getText()+ '\n');
 

            }

            else

            {

            JOptionPane.showMessageDialog(null, "wrong key");

            }

           

            //now clear the textbox ready for next entry

            txtNumber.setText(null);

Open in new window

0
 
LVL 17

Accepted Solution

by:
Thomas4019 earned 200 total points
ID: 24081802
This code should not be put in a keyPressed. You should have a JButton with an action listener. Then call get Text to get the whole string they input. Here is a simple example.
import javax.swing.*;

import java.awt.*;

import java.awt.event.*;
 

class Example extends JFrame implements ActionListener

{

	JTextField input;
 

	Example()

	{

		setSize(320,240);

		setDefaultCloseOperation(EXIT_ON_CLOSE);
 

		input = new JTextField();

		add(input,BorderLayout.CENTER);
 

		JButton submit = new JButton("Submit");

		submit.addActionListener(this);

		add(submit,BorderLayout.SOUTH);
 

		setVisible(true);

	}
 

	public void actionPerformed(ActionEvent evt)

	{

		if(!input.getText().matches("^[\\+\\-\\*\\/].*"))

		{

			JOptionPane.showMessageDialog(null,"Bad Input");

		}
 

		//CODE USING INPUT HERE

	}
 

	public static void main(String args[])

	{

		new Example();

	}

}

Open in new window

0
 

Author Comment

by:chandanchoubey
ID: 24082806
Thanks Thomas4019. I really appreciate it. But I dont want a JButton. I want JOptionPane to appear when user presses "enter key" rather than clicking on Submit button
0
 
LVL 17

Assisted Solution

by:Thomas4019
Thomas4019 earned 200 total points
ID: 24083032
very simple, simply add the actionlistener on the JTextField and remove the JButton, here is the new source code.
import javax.swing.*;

import java.awt.*;

import java.awt.event.*;
 

class Example extends JFrame implements ActionListener

{

	JTextField input;
 

	Example()

	{

		setSize(320,240);

		setDefaultCloseOperation(EXIT_ON_CLOSE);
 

		input = new JTextField();

		input.addActionListener(this);

		add(input,BorderLayout.CENTER);
 

		setVisible(true);

	}
 

	public void actionPerformed(ActionEvent evt)

	{

		if(!input.getText().matches("^[\\+\\-\\*\\/].*"))

		{

			JOptionPane.showMessageDialog(null,"Bad Input");

		}
 

		//CODE USING INPUT HERE

	}
 

	public static void main(String args[])

	{

		new Example();

	}

}

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Eclipse Neon and jdk 1.8.0 11 135
Java SE 8u111  Lot of stuff broke 11 54
more than one jdk and one jre 1 32
even odd program using while loop 3 28
Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
The viewer will learn how to implement Singleton Design Pattern in Java.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now