Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
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
Medium Priority
?
353 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 12

Assisted Solution

by:basav_com
basav_com earned 150 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 600 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 600 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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
This video teaches viewers about errors in exception handling.
Suggested Courses

705 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