gpt4 book ai didi

Java 多按钮 Action

转载 作者:行者123 更新时间:2023-12-02 07:52:40 27 4
gpt4 key购买 nike

我需要开发一个带有 GUI 的 Java 应用程序,它代表一台 ATM 机。为此,我必须从“键盘”(9 个按钮)读取帐号和 PIN。我必须读取按下的每个按钮的每个操作(操作监听器返回按钮的值),并将其数字连接到一个字符串,当按下按钮“ok”时,它应该返回 int (Integer.parseInt( ))。我的问题是我如何“等待\停止\卡住”我的程序,直到输入数字并按“确定”?

如果这个问题有点令人困惑,我很抱歉

感谢您的帮助;)

P.S 我为 ATM 机的每个部分都有一个类(class)。 EG:键盘、屏幕、ATM..等

P.S.S 如果您想查看一些代码,请告诉;)

最佳答案

包含键盘组件和“确定”按钮的组件应将自身注册为所有组件的 ActionListener。为了区分源组件,请使用 EventObjectgetSource() 方法。一旦您确定哪个组件生成了事件,请将号码添加到集合中,或者验证输入的 PIN。

<小时/>

以下代码片段尝试验证输入的 PIN 码的长度:

示例 -

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.text.MaskFormatter;

final class ATMDemo extends JFrame implements ActionListener{
private static final long serialVersionUID = -8099290319139531183L;
private final JFormattedTextField textField;
private final JPanel layerOne;
private final JPanel layerTwo;
private final JPanel layerThree;
private final JPanel layerFour;
private final JPanel layerFive;
private final JPanel layerSix;
private final JButton one;
private final JButton two;
private final JButton three;
private final JButton four;
private final JButton five;
private final JButton six;
private final JButton seven;
private final JButton eight;
private final JButton nine;
private final JButton zero;
private final JButton okButton;
private final JButton clearButton;

private ATMDemo() throws ParseException{
super("ATM Demo");
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
setDefaultCloseOperation(EXIT_ON_CLOSE);
layerOne = new JPanel();
layerTwo = new JPanel();
layerThree = new JPanel();
layerFour = new JPanel();
layerFive = new JPanel();
layerSix = new JPanel();

// Add layer one
textField = new JFormattedTextField(new MaskFormatter("*********"));
textField.setEditable(false);
textField.setColumns(7);
layerOne.add(textField);

// Add layer two
one = new JButton(String.valueOf(1));
two = new JButton(String.valueOf(2));
three = new JButton(String.valueOf(3));
layerTwo.add(one);
layerTwo.add(two);
layerTwo.add(three);

// Add layer three
four = new JButton(String.valueOf(4));
five = new JButton(String.valueOf(5));
six = new JButton(String.valueOf(6));
layerThree.add(four);
layerThree.add(five);
layerThree.add(six);

// Add layer four
seven = new JButton(String.valueOf(7));
eight = new JButton(String.valueOf(8));
nine = new JButton(String.valueOf(9));
layerFour.add(seven);
layerFour.add(eight);
layerFour.add(nine);

// Add layer five
zero = new JButton(String.valueOf(0));
layerFive.add(zero);

// Add layer six
okButton = new JButton("OK");
clearButton = new JButton("Clear");
layerSix.add(okButton);
layerSix.add(clearButton);
}

@Override
public final void actionPerformed(final ActionEvent e) {
final JButton source = (JButton)e.getSource();
if(source.equals(okButton)){
if(textField.getValue() != null && textField.getValue().toString().length() != 9){
JOptionPane.showMessageDialog(this, "Invalid PIN length - must be 9 digits long.", "Error", JOptionPane.ERROR_MESSAGE);
}
else{
JOptionPane.showMessageDialog(this, "Valid PIN length.", "Valid", JOptionPane.INFORMATION_MESSAGE);
}
clearButton.doClick();
}
else if(source.equals(clearButton)){
textField.setValue(null);
}
else{
final StringBuilder sb = new StringBuilder();
if(textField.getValue() != null){
for(char c: textField.getValue().toString().toCharArray()){
sb.append(c);
}
}

if(sb.length() != 9){
sb.append(source.getText());
textField.setValue(sb);
}
}
}

static final ATMDemo newInstance() throws ParseException{
final ATMDemo demo = new ATMDemo();
demo.one.addActionListener(demo);
demo.two.addActionListener(demo);
demo.three.addActionListener(demo);
demo.four.addActionListener(demo);
demo.five.addActionListener(demo);
demo.six.addActionListener(demo);
demo.seven.addActionListener(demo);
demo.eight.addActionListener(demo);
demo.nine.addActionListener(demo);
demo.zero.addActionListener(demo);
demo.okButton.addActionListener(demo);
demo.clearButton.addActionListener(demo);
demo.add(demo.layerOne);
demo.add(demo.layerTwo);
demo.add(demo.layerThree);
demo.add(demo.layerFour);
demo.add(demo.layerFive);
demo.add(demo.layerSix);
demo.setSize(225, 250);
demo.setLocationRelativeTo(null);
return demo;
}

public static final void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
try {
ATMDemo.newInstance().setVisible(true);
} catch (ParseException e) {
e.printStackTrace();
}
}
});
}
}

enter image description here

a) PIN 长度无效

enter image description here

b) 有效 PIN 长度

enter image description here

关于Java 多按钮 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com