Java Swing - 不显示闪烁图标

Bob*_*r02 2 java icons swing timer glasspane

我正在尝试使用GlassPane将图标闪烁给用户.我正在运行一个javax.swing.Timer基本上执行此操作:

for (int i = 0; i < 3; i++) {
    frame.getGlassPane().setVisible(true);
    try {
        Thread.sleep(500);
    } catch (InterruptedException e1) {
       //To change body of catch statement use File | Settings | File Templates.
        e1.printStackTrace();
    }
    frame.getGlassPane().setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我睡眠EDT(计时器中的当前线程),则图标不会显示,因为在paintComponent线程进入睡眠状态之前,该方法无法完全调用.因此,当下一条指令启动时,玻璃窗格将被隐藏,结果,图标永远不会显示.有没有办法用这种(类似的)方法实现我想要的东西?

Mad*_*mer 5

你可以用一个 javax.swing.Timer

public FlashTimer() {

    javax.swing.Timer flashTimer = new javax.swing.Timer(500, new FlashHandler());
    flashTimer.setCoalesce(true);
    flashTimer.setRepeats(true);
    flashTimer.setInitialDelay(0);

}

public class FlashHandler implements ActionListener {

    private int counter;

    @Override
    public void actionPerformed(ActionEvent ae) {

        countrol.setVisible(counter % 2 == 0);
        counter++;
        if (counter > 3) {

            ((Timer)ae.getSource()).stop();

        }

    }

}
Run Code Online (Sandbox Code Playgroud)