【问题标题】:actionlistener to Textfield文本字段的动作监听器
【发布时间】:2015-01-24 19:04:49
【问题描述】:

您好,我正在尝试使用 GUI 进行信用卡验证,但无法正常工作。我很难让动作侦听器与用户在文本字段中输入的内容一起工作。我已经完成了大部分代码。谢谢你的帮助:)

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;
}
}

【问题讨论】:

    标签: java user-interface actionlistener credit-card


    【解决方案1】:

    xyzField 字段尚未初始化。

    改变这一行:

    add(new JTextField(16));
    

    通过这些:

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

    【讨论】:

    • 非常感谢,让它开始工作,现在必须以 GUI 的形式而不是在顾问中获得答复
    • @Mars 不客气。不要忘记,如果答案令人满意地解决了您的问题,您可以accept it。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2013-12-24
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2011-09-26
    • 2013-12-06
    相关资源
    最近更新 更多