Я работаю над проектом, чтобы вставлять числа в зависимости от количества нажатий на кнопку с помощью счетчика. Есть только одна кнопка. Когда эта кнопка нажата один раз, она должна ввести 1 в текстовое поле. Если эта кнопка снова нажата в течение 3 секунд, 1 следует заменить на 2. Если она нажата через 3 секунды, следующая цифра должна быть введена таким же образом. Я добавил код ниже.Использование той же кнопки для ввода текста в текстовом поле
У меня проблемы с этой программой. Когда я дважды нажимаю кнопку в течение 3 секунд, она вводит «12» в JTextField. Также у меня возникли проблемы с сбросом счетчика после ввода одной цифры. Надеюсь, вы поймете мой вопрос.
package timertry;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class TimerTry extends JFrame implements ActionListener{
public JFrame panel1;
JTextField tf;
JButton button;
int counter=0;
public TimerTry() {
panel1=new JFrame("Single button keypad try");
panel1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
tf=new JTextField();
tf.setEnabled(false);
tf.setHorizontalAlignment(JTextField.CENTER);
button=new JButton();
}
public void launchFrame(){
panel1.setLayout(null);
panel1.setVisible(true);
panel1.setExtendedState(JFrame.MAXIMIZED_BOTH);
panel1.add(tf);
tf.setSize(300, 50);
tf.setLocation(500, 150);
tf.setEnabled(false);
tf.setHorizontalAlignment(JTextField.CENTER);
panel1.add(button);
button.setSize(360,50);
button.setLocation(900, 250);
button.setLabel("Press");
button.setHorizontalAlignment(JTextField.CENTER);
button.addActionListener(this);
}
public static void main(String[] args) {
// TODO code application logic here
TimerTry tt=new TimerTry();
tt.launchFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
Thread thread=new Thread(){
@Override
public void run(){
try{
sleep(3000);
counter++;
if(counter==1){
tf.setText(tf.getText()+counter);
}
else if(counter==2){
tf.setText(tf.getText()+counter);
}
else if(counter==3){
tf.setText(tf.getText()+counter);
}
else {
tf.setText(tf.getText()+counter);
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
};
thread.start();
}
}
Не заворачивайте ваша логика в потоке, каждый раз, когда вы нажимаете кнопку, вы начинаете совершенно новый и независимый поток. – MadProgrammer