Вы не хотите "заморозить" вашу программу. Вместо этого вы хотите закодировать его так, чтобы слушатель, который реагирует на нажатие кнопки OK, выполнял свои действия только в том случае, если цифровые кнопки были нажаты ранее. Это потребует, чтобы вы дали классу переменную, в которой хранятся результаты последних нажатий кнопок ххх (для этой или даже простой строки может работать массив или список), а затем в прослушивателе вашей кнопки «ОК» есть блок if, который проверяет эта переменная, и если все в порядке, выполняет свою магию.
Например, вы могли бы иметь String с именем pinInput и иметь его = "" или пустую String (или лучше StringBuilder - но это не совсем необходимо для вашей простой программы). В каждом слушателе номерной кнопки вы объединяете строку, представляющую число, нажатое на строку pinInput. В прослушивателе кнопки OK вы проверяете, превышает ли длина pinInput длину минимально требуемых символов, и если да, возьмите последние x символов из строки и проверьте, соответствуют ли они PIN-коду.
Edit:
Вы заявляете:
Класс ATM будет «основным» в программе и будет вызывать метод readInt () класса Keypad. это должно быть здесь, чтобы я получил номер, который ввел пользователь.
Вы можете разрешить основному классу добавлять слушателя в любой другой класс, если это необходимо, чтобы он получал уведомления при нажатии кнопки.
Независимо от того, как вы смотрите на это, вам нужно будет использовать прослушиватели, чтобы ваша программа реагировала на события («управляемая событиями»). Вот как работает Java Swing GUI.
Редактировать 2
Например, вот код, в котором JFrame содержит JPanel, на котором есть JButtons, и JFrame отвечает, только если кнопки на JPanel нажимаются в определенном порядке - A, затем B, затем OK:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class AnExample {
private static void createAndShowGui() {
AnExample mainPanel = new AnExample();
JFrame frame = new AnExMain();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class AnExMain extends JFrame {
private JTextField field = new JTextField(
"Press A, then B, then OK, in that order", 20);
private Control control = new Control(this);
public AnExMain() {
add(field, BorderLayout.PAGE_START);
add(new InnerPanel(control), BorderLayout.CENTER);
}
public void fieldSetText(String text) {
field.setText(text);
}
}
class Control {
private AnExMain anExMain;
private String data = "";
public Control(AnExMain anExMain) {
this.anExMain = anExMain;
}
public void btnPressed(String actionCommand) {
anExMain.fieldSetText("");
if (actionCommand.equals("OK")) {
if (data.equals("AB")) {
anExMain.fieldSetText("Buttons pressed in proper order!");
}
data = "";
} else {
data += actionCommand;
if (data.length() > 2) {
data = data.substring(data.length() - 2);
}
}
}
}
class InnerPanel extends JPanel {
public InnerPanel(final Control control) {
JButton btnA = new JButton("A");
JButton btnB = new JButton("B");
JButton btnOK = new JButton("OK");
add(btnA);
add(btnB);
add(btnOK);
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
control.btnPressed(e.getActionCommand());
}
};
btnA.addActionListener(listener);
btnB.addActionListener(listener);
btnOK.addActionListener(listener);
}
}