0

作为作业的一部分,我试图从 JTextField 中检索一个值。我想要得到的是一个账户的利率。它应该大于零,并且应该询问用户,直到他/她给出大于零的东西。此外,如果输入不是数字,比如一串文本,也应该有错误,它应该再次询问用户。

我已经完成了一些部分,但我在完成任务时遇到了问题。

以下是调用 GUI 的方法:

//getting the interest rate
protected void getInterest() {

    if( this instanceof flexibleAccount ) {

    }

    else {

        GetInterest getInterest = new GetInterest();
        getInterest.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        getInterest.setSize( 350, 100 );
        getInterest.setVisible(true);
    }//end else

}//end getInterest

它到这里:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import java.util.InputMismatchException;


public class GetInterest extends JFrame {

private JTextField textField;
private double interestRate;

public GetInterest() {

    super("Banking Application");
    setLayout( new FlowLayout() );

    textField = new JTextField("Enter interest rate",10);
    add(textField);

    TextFieldHandler handler = new TextFieldHandler();
    textField.addActionListener( handler );

}//end GetInterest

private class TextFieldHandler implements ActionListener {

    @Override
    public void actionPerformed( ActionEvent event ) {

        try {

            String string;

            string = textField.getText();

            //string = String.format("%s", event.getActionCommand());

            interestRate = Double.parseDouble(string);

            if( interestRate <= 0 )
                JOptionPane.showMessageDialog( null, "Interest rate should be greater than zero" );
            else if( interestRate > 0 ) {
                JOptionPane.showMessageDialog( null, interestRate );
            }
            //else
                //throw new InputMismatchException;

        }

        catch(InputMismatchException  exception) {

            System.out.println(accountTest.getStackTrace(exception));

        }




    }//end actionPerformed



}//end TextFieldHandler

}//end GetInterest

如您所见,我得到了值,并且再次询问用户他/她是否输入了小于或等于零的值。

但缺少以下内容:

  • 将其返回到 getInterest 方法,
  • 完成后窗口消失,
  • 如果用户输入文本,则显示错误。

我怎样才能实现这些。

4

2 回答 2

0

如果用户输入文本,则显示错误。k 值将是 JTextField 文本

我用 try catch 解决了这个问题

public static void main(String[] args) {
    String k = "a";

    try{
    System.out.println(Integer.parseInt(k));
    }catch(NumberFormatException ex){
        JOptionPane.showConfirmDialog(this, "Is not required data");
    }

完成后窗口消失

方法执行后int value = JOptionPane.showMessageDialog( null, interestRate );,它返回一个整数。例如,如果您的对话框有 ok,no,cancel,您将得到 asok value = 0; ok value = 1; cancel value =2;并且您将检查 ,if value==2然后关闭框架;

第一个没看懂

于 2012-04-08T18:12:50.907 回答
0

为什么不简单地将键盘上的字母和符号键静音?

试试这个代码,它更优雅更好,只需在你的 JTextField 上注册一个 keyTyped 监听器

private void jTextField1KeyTyped(KeyEvent evt)
{
    int x = evt.getKeyChar();
    if (x != KeyEvent.VK_BACK_SPACE && x !=KeyEvent.VK_PERIOD) {

        if(x ==KeyEvent.VK_PERIOD)
        {
            if(jTextField7.getText().contains("."))
            {
                evt.consume();
            }
        }

       if (x < 48 || x > 57) {
            evt.consume();
        }
    }

}

这照顾到用户应该只输入数字,它应该只包含 1 个小数点

接下来,您将拥有提交按钮,用户将在其中输入利率后单击该按钮

查看

    if(jTextField7.getText().trim().isEmpty())
    {
        JOptionPane.showMessageDialog(this,"Cannot be left empty","Error",JOptionPane.ERROR_MESSAGE);
        return;
    }
   else
   {
      Double db= new Double(jTextField7.getText());
      {
           if(db==0.0)
           {
              JOptionPane.showMessageDialog(this,"Cannot be Zero","Error",JOptionPane.ERROR_MESSAGE);
              return;
           }
    }

   getInterest(jTextField1.getText());

干杯!!

于 2012-04-09T10:35:10.417 回答