本文介紹了在一些快速重復(fù)的操作事件調(diào)用后,JLabel文本無法正確顯示的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在為我的Tic Tac Toe項(xiàng)目編寫一個(gè)圖形用戶界面,我很享受下面這個(gè)小視覺效果的樂趣。每次用戶設(shè)置CPU播放器并單擊完成按鈕而忘記設(shè)置CPU強(qiáng)度級別時(shí),我都會像下面的代碼示例一樣顯示一條小警告消息。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class TestingStuff implements ActionListener {
JLabel myLabel;
JFrame myFrame;
JButton myButton;
JPanel myPanel;
public TestingStuff() {
myFrame = new JFrame("Hello");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
myPanel.setBackground(Color.DARK_GRAY);
myFrame.add(myPanel, BorderLayout.CENTER);
myLabel = new JLabel("Hi dear stackoverflow coders!");
myLabel.setFont(new Font("MV Boli", Font.BOLD, 15));
myLabel.setForeground(Color.GREEN);
myPanel.add(myLabel);
myButton = new JButton("Click me like there's no tomorrow!");
myButton.addActionListener(this);
myFrame.add(myButton, BorderLayout.SOUTH);
myFrame.pack();
myFrame.setLocationRelativeTo(null);
myFrame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
int timerDelay = 1;
Timer blinkTimer = new Timer(timerDelay, new ActionListener() {
private int count = 0;
private int maxTime = 30;
private String hello = myLabel.getText();
private int len = hello.length();
private String s;
public void actionPerformed(ActionEvent e) {
if (count * timerDelay >= maxTime) {
((Timer) e.getSource()).stop();
} else {
myLabel.setVisible(true);
if (count < len) {
s = hello.substring(0, count + 1);
myLabel.setText(s);
}
count++;
}
}
});
blinkTimer.start();
}
public static void main(String[] args) {
TestingStuff foo = new TestingStuff();
}
}
嘗試重復(fù)單擊該按鈕。
點(diǎn)擊前:
點(diǎn)擊后:
至少在我的機(jī)器上。由于用戶沒有理由重復(fù)單擊Done按鈕,我并不太擔(dān)心,但仍然…我想我最終會禁用用戶在短小的動畫過程中可以點(diǎn)擊的每個(gè)按鈕,以避免意外行為。
我的問題是:有人能解釋一下發(fā)生了什么嗎?為什么我能在7-8次快速點(diǎn)擊后看到截短的文本?
推薦答案
更新之間的延遲設(shè)置為1
毫秒(幸運(yùn)地獲得了準(zhǔn)確的