文本域的动作监听器
actionlistener to Textfield
您好,我正在尝试使用 GUI 进行信用卡验证,但无法正常工作。我很难让动作侦听器处理用户在文本字段中输入的内容。我已经完成了大部分代码。感谢您的帮助:)
import java.util.Scanner;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class 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);
您好,我正在尝试使用 GUI 进行信用卡验证,但无法正常工作。我很难让动作侦听器处理用户在文本字段中输入的内容。我已经完成了大部分代码。感谢您的帮助:)
import java.util.Scanner;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class 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);