2012-04-08 6 views
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,
  • окно исчезает после завершения
  • отображается ошибка, если пользователь вводит текст.

Как я могу это достичь.

+0

1) Для более эффективной помощи, отправьте сообщение [SSCCE] (http://sscce.org/). 2) См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/a/9554657/418556). Фактически, симптомы этой проблемы предполагают, что модальный диалог - это именно то, что необходимо. –

ответ

0

отображение ошибки, если пользователь вводит текст. к значению будет JTextField текста

Я сделал эту проблему с попыткой поймать

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 value = 0; ok value = 1; cancel value =2; И вы проверите, if value==2 затем закройте рамку;

первый один я не понял

0

Почему бы вам не просто молчит алфавит и клавиши символов на клавиатуре ??

попробуйте этот код, его более стильный и красивый просто зарегистрировать keyTyped слушателя на вашем JTextField

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()); 

Ура !!

Смежные вопросы