gpt4 book ai didi

Java Swing 字母数字键盘

转载 作者:行者123 更新时间:2023-12-01 11:55:35 24 4
gpt4 key购买 nike

我正在尝试构建一个“哑”手机,因此我需要构建一个字母数字键盘。因此,对于每个按钮来说,如果在一定的时间限制(2 秒)内重复按下它们,它们输入的字符就会发生变化。例如,按 1 输入 A,但如果 2 秒内再次按下,则输入变为 B,那么如果 2 秒内再次按下,则输入为 C,依此类推。

已经有一个与此完全相关的问题 ( Swing alphanumeric keypad )。我读了一整天并试图理解它,但我不能..

我想出了这样的东西(我知道这可能真的很愚蠢,但我的大脑确实无法让它变得不那么愚蠢),以下代码位于 1 按钮的 Action 监听器内;

    long buttn_last_pressed = System.currentTimeMillis();
line.setText("A");
if ((System.currentTimeMillis() - buttn_last_pressed) <= 2000) {
line1.setText("B"); }

这个问题是输入总是显示为B。我真的被困住了,我无法理解这个问题,正如你从我想出的愚蠢代码中看到的那样..任何帮助将不胜感激,预先非常感谢您! :)

最佳答案

所以,如果我们看一下这个片段......

long buttn_last_pressed = System.currentTimeMillis();
line.setText("A");
if ((System.currentTimeMillis() - buttn_last_pressed) <= 2000) {

除非 line.setText("A"); 非常非常慢,否则不太可能需要 2 秒才能到达 if 语句...

你的意思是不是更像......

Button

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class JavaApplication787 {

public static void main(String[] args) {
new JavaApplication787();
}

public JavaApplication787() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

private JTextField field;

public TestPane() {
setLayout(new GridBagLayout());
JButton btn = new JButton("1 ABC");
btn.addActionListener(new ActionListener() {
private long lastClick = -1;
private int count;
private String[] value = {"1", "A", "B", "C"};
@Override
public void actionPerformed(ActionEvent e) {
long now = System.currentTimeMillis();
if (now - lastClick < 2000) {
count++;
if (count >= value.length) {
count = 0;
}
} else {
count = 0;
}
field.setText(value[count]);
lastClick = System.currentTimeMillis();
}
});
field = new JTextField(4);

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(btn, gbc);
add(field, gbc);
}

}

}

好的,所以这只是检查最后一次点击的时间之间的差异,如果小于 2 秒,它会更新一个 count,指示要使用的当前值,否则,它将 count 重置为 0,默认返回正常键...

btn.addActionListener(new ActionListener() {
private long lastClick = -1;
private int count;
private String[] value = {"1", "A", "B", "C"};
@Override
public void actionPerformed(ActionEvent e) {
long now = System.currentTimeMillis();
if (now - lastClick < 2000) {
count++;
if (count >= value.length) {
count = 0;
}
} else {
count = 0;
}
field.setText(value[count]);
lastClick = System.currentTimeMillis();
}
});

关于Java Swing 字母数字键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28469026/

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