Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 359
  • Last Modified:

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

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
chandanchoubey
Asked:
chandanchoubey
  • 2
  • 2
3 Solutions
 
basav_comCommented:
0
 
chandanchoubeyAuthor Commented:
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
 
Thomas4019Commented:
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
 
chandanchoubeyAuthor Commented:
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
 
Thomas4019Commented:
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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now