2015-01-24 4 views
0

Привет, я пытаюсь использовать GUI для проверки кредитной карты, я не могу заставить его работать. im с трудным временем прослушивания действия для работы с тем, что пользователь вводит в текстовое поле. У меня большая часть кода завершена. Спасибо за любую помощь :)actionlistener to Textfield

import java.util.Scanner; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

общественный класс CreditCard простирается JFrame { общественного JTextField xyzField;

public CreditCard(){ 
    setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); 
    add(new JLabel("Credit Card Number")); 
    add(new JTextField(16)); 
    JButton jbtCHECK = new JButton("Check"); 

    JPanel panel = new JPanel(); 
    panel.add(jbtCHECK); 
    add(panel); 
    CHECKListenerClass listener1 = new CHECKListenerClass(); 
    jbtCHECK.addActionListener(listener1); 
} 

public static void main(String[] args) { 

    JFrame frame = new CreditCard(); 
    frame.setTitle("Credit Card validation"); 
    frame.setSize(450, 100); 
    frame.setLocation(200, 100); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true);  

} 

class CHECKListenerClass implements ActionListener{ 
    public void actionPerformed(ActionEvent e) { 


    long total; 
    Scanner input = new Scanner(xyzField.getText()); 
    long number = input.nextLong(); 

    total = sumOfEvenPlaces(number) + sumOfOddPlaces(number); 

    System.out.println(total); 
    if(isValid(total)) { 

     System.out.println("This card is valid."); 
    } 
    else { 
     System.out.println("Your card is invalid."); 
    } 
     } 

} 

public static boolean isValid(long total) { 
    if (total % 10 == 0) { 
     return true; 
    } 
    return false; 
} 

public static int sumOfEvenPlaces(long number) { 
    int sum = 0; 
    number = number/10; 
    while (number != 0) { 
     sum += getDigit((int)((number % 10) * 2)); 
     number = number/100; 
    } 
    System.out.println(sum); 
    return sum; 
} 

public static int getDigit(int number) { 
    if (number <= 9) { 
     return number; 
    } 
    else if (number > 9) 
     return (number % 10 + number/10); 
    return number; 

}

public static int sumOfOddPlaces(long number) { 
    int sum = 0; 
    while (number != 0) { 
     sum += (int)(number % 10); 
     number = number/100; 
    } 
    System.out.println(sum); 
    return sum; 
} 

public static boolean getPrefix1(long number, int k) { 
    return getPrefix(number, getSize(number)) == number; 
} 

public static int getSize(long number) { 
     int len = 0; 
     while (number >= 10) { 
      number /= 10; 
      len++; 
    } 
    return len; 
} 

public static long getPrefix(long number, int k) { 
    long result = number; 
    for (int i = 0; i < getSize(number) - (k - 1); i++) 
     result /= 10; 
    return result; 
} 
} 

ответ

0

Поле xyzField не был инициализирован.

Изменить эту строку:

add(new JTextField(16)); 

этими:

xyzField = new JTextField(16); 
add(xyzField); 
+0

Большое спасибо, получил его на работу, теперь придется получить ответ как GUI, а не в совет – Mars

+0

Хамм. .. Вы можете использовать 'JOptionPane.showMessage'. :-) –

+0

@Mars Добро пожаловать. Не забывайте, что если ответ удовлетворит ваш вопрос удовлетворительно, вы можете [принять его] (http://meta.stackoverflow.com/a/5235/227183). :-) –

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

  • Нет связанных вопросов^_^