我正在用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);
}
答案 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);
}
}