gpt4 book ai didi

Java - 将值输入 JTextArea 后事件之间的延迟

转载 作者:行者123 更新时间:2023-11-30 01:41:48 25 4
gpt4 key购买 nike

我准备了一个简单的表单(javax.swing.JFrame),JTextArea 位于该表单上。输入“TAB”值后,我希望在表单上看到一个可见的 JPanel 几秒钟。不幸的是,当我发生以下事件时:

 <br>
JPanel.setVisible (true); <br>
TimeUnit.SECONDS.sleep (3); <br>
JPanel.setVisible (false); <br>
in keyPressed for JTextArea.KeyListener ()

它们不会一个接一个地执行 - 首先我 sleep ,然后 JPanel.setVisible (true) 和 JPanel.setVisible (false)

public class Form1 extends JFrame {

JTextArea txt1 = new JTextArea();
JPanel pnl2 = new JPanel();

public Form1() {

txt1.setLocation(10, 10);
txt1.setSize(100, 30);
txt1.addKeyListener(new KeyListener() {

@Override
public void keyPressed(KeyEvent e
) {
if (e.getKeyCode() == KeyEvent.VK_TAB) {
e.consume();

pnl2.setVisible(true);
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException ex) {
Logger.getLogger(Form1.class.getName()).log(Level.SEVERE, null, ex);
}
pnl2.setVisible(false);
}
}

@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyReleased(KeyEvent e
) {
}
});
add(txt1);

pnl2.setLayout(null);
pnl2.setLocation(10, 150);
pnl2.setSize(100, 100);
pnl2.setBorder(BorderFactory.createEtchedBorder());
pnl2.setVisible(false);
add(pnl2);
}
}

主类:

public class Main {

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Form1 f = new Form1()
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 400);
f.setLocationRelativeTo(null);
f.setResizable(false);
f.setLayout(null);
f.setVisible(true);
}
}
);
}
}

如何实现在TextArea上输入“TAB”按钮后,在表单上显示面板几秒钟的效果?

最佳答案

不要阻止 AWT 事件调度线程 (EDT)。

相反,设置一个javax.swing.Timer(正确获取包 - 而不是另一个!)。 Swing Timer 可能会创建另一个线程来进行计时,但通过 EDT 将事件发回(通过 java.awt.EventQueue.invokeLater 或类似的)。 sleep 后执行的代码应移至操作监听器。

                pnl2.setVisible(true);
javax.swing.Timer timer =
new javax.swing.Timer(3000, event -> {
pnl2.setVisible(false);
});
timer.setRepeats(false);
timer.start();

(我使用了完全限定名称来强调正确的Timer。有时我忘记默认情况下它会重复,这会令人困惑。)

关于Java - 将值输入 JTextArea 后事件之间的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59671018/

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