Java中的行之间的延迟

时间:2018-06-10 22:42:57

标签: java swing delay wait

我正在用Java创建一个纸牌游戏,并希望描绘出交易的外观。我创建了JLabel并使用.setVisible(true)使它们可见,并希望在每张卡片之间显示延迟。 我尝试过使用wait()和Thread.sleep(),但都没有用。 wait()给了我错误,Thread.sleep只是暂停了整个程序,而不仅仅是每次出现。 (此代码在按下“下一步”按钮时运行,因此它位于actionPerformed方法中)

注意:我是初学者..请保持简单:)

else if(eventName.equals("Next"))
  {
     rules.setVisible(false);
     next.setVisible(false);
     inst.setVisible(false);
     cardDeck.setVisible(true);
     discard.setVisible(true);
     tot.setVisible(true);
     specialCards.setVisible(true);
     // delay here
     userCard1.setVisible(true);
     // delay here
     compCard1.setVisible(true);
     // delay here
     userCard2.setVisible(true);
     // delay here
     compCard2.setVisible(true);
     // delay here
     userCard3.setVisible(true);
     // delay here
     compCard3.setVisible(true);
  }  

1 个答案:

答案 0 :(得分:1)

使用Timers在一段时间后显示标签。 您将在文档中看到使用它们非常简单。

您也可以插入暂停应用程序一段时间的代码,例如Thread.sleep,但只要应用程序等待,这会导致您的应用完全无响应。

简单示例:

package testTimer;

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class TimerTest extends JFrame {

    // These labels will be shown after some delay
    JLabel l1 = null;
    JLabel l2 = null;

    public TimerTest() {

        Container cpane = getContentPane();
        cpane.setLayout(new BoxLayout(cpane, BoxLayout.Y_AXIS));
        JLabel l = new JLabel("Timer Test");
        l.setAlignmentX(Component.CENTER_ALIGNMENT);
        cpane.add(l);
        l.setVisible(true);
        l1 = new JLabel("1");
        l2 = new JLabel("2");
        cpane.add(l1);
        l1.setVisible(false);
        cpane.add(l2);
        l2.setVisible(false);

        // Now prepare two timers, one for each label
        int delayForL1Millis = 1000;
        Timer t1 = new Timer(delayForL1Millis, new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                l1.setVisible(true);
            }
        });
        t1.setRepeats(false);

        int delayForL2Millis = 2000;
        Timer t2 = new Timer(delayForL2Millis, new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                l2.setVisible(true);
            };
        });
        t2.setRepeats(false);

        // And start them
        t1.start();
        t1 = null;
        t2.start();
        t2 = null;

    }

    public static void main(String[] argv) {

        TimerTest timertest = new TimerTest();
        timertest.setVisible(true);

    }

}