繁体   English   中英

文本框的动作监听器

[英]actionlistener to Textfield

嗨,我正在尝试使用GUI进行信用卡验证,但我无法使其正常工作。 我很难让动作监听器来处理用户在文本字段中输入的内容。 我已经完成了大部分代码。 感谢您的任何帮助 :)

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

公共类CreditCard扩展了JFrame {public 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;
}
}

字段xyzField尚未初始化。

更改此行:

add(new JTextField(16));

通过这些:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM