我打算编写控制JLabel闪烁三次的java代码,然后在第三次闪烁后启用其中的文本保持透明/“消失”。
从下面的代码中可以看出,我已经能够编写一个连续闪烁的JLabel,但是想创建一个只闪烁三次的JLabel,然后使其中的文本保持透明。
public class BlinkLabel extends JLabel {
private static final long serialVersionUID = 1L;
private static final int BLINKING_RATE = 1000; // in ms
private boolean blinkingOn = true;
public Timer timer;
public BlinkLabel(String text) {
super(text);
timer = new Timer( BLINKING_RATE , new TimerListenerTwo());
timer.setInitialDelay(0);
timer.start();
}
public void setBlinking(boolean flag) {
this.blinkingOn = flag;
}
public boolean getBlinking(boolean flag) {
return this.blinkingOn;
}
public class TimerListenerTwo implements ActionListener{
int counter = 1;
public TimerListenerTwo() {
}
public void actionPerformed(ActionEvent evt){
if(counter == 3){//3 = YOUR MAX
timer.stop();
}
counter++;
}
}
}
我按以下方式调用上述函数:
BlinkLabel label = new BlinkLabel("");
label.setText("Blink blink");
如何编辑上面的代码以使JLabel闪烁三次并使文本消失。
非常感谢任何想法/建议。
答案 0 :(得分:3)
尝试使用counter
并在counter
上增加blink
,如果计数器为3则
清除标签的文字setText("")
修改强>
class TimerListener implements ActionListener{
int counter = 1;
public void actionPerformed(ActionEvent evt){
if(counter == 3){//3 = YOUR MAX
timer.stop();
}
counter++;
}
}
答案 1 :(得分:3)
非常简单,在JFrame或JDialog中创建一个子类。
class LbBlink implements ActionListener {
private javax.swing.JLabel label;
private java.awt.Color cor1 = java.awt.Color.red;
private java.awt.Color cor2 = java.awt.Color.gray;
private int count;
public LbBlink(javax.swing.JLabel label){
this.label = label;
}
@Override
public void actionPerformed(ActionEvent e) {
if(count % 2 == 0)
label.setForeground(cor1);
else
label.setForeground(cor2);
count++;
}
}
在你的班级中声明一个变量。
private Timer timerLB;
之后,在你的类构造中设置变量。
timerLB = new Timer(1000, new "Your Class".LbBlink("Your jLabel"));
最后,在您的应用程序中,开始闪烁
timerLB.start();
停止:
timerLB.stop();
答案 2 :(得分:2)
ActionListener
,Swing Action has implemented isEnabled() 意思是代码行
public void setBlinking(boolean flag) {
this.blinkingOn = flag;
}
public boolean getBlinking(boolean flag) {
return this.blinkingOn;
}
对(已经可见的)Swing GUI的每次更改都将在Swing Action
ActionListener
内完成
那里(可能)没有理由继承JLabel,为JLabel
创建局部变量,Swing Timer
,
我想念代码Timer.setRepeats(boolean)
答案 3 :(得分:1)
计数闪烁,当它足够时,请在计时器上拨打stop。
答案 4 :(得分:0)
不需要计时器。只需使用THREAD即可完成。
import java.awt.Color;
import javax.swing.*;
class Sample {
int i;
private JFrame f;
private JLabel l;
Sample() throws InterruptedException {
f = new JFrame("test");
f.setSize(400, 400);
l = new JLabel("Testing");
f.add(l);
f.setVisible(true);
for (i = 0; i < 6; i++) {
if (i % 2 == 0) {
l.setForeground(Color.red);
} else {
l.setForeground(Color.BLUE);
}
Thread.sleep(500);
}
l.setEnabled(false);
}
public static void main(String a[]) throws InterruptedException {
new Sample();
}
}
答案 5 :(得分:0)
有人建议使用displayHelpMessage(参考: https://blog.ajduke.in/2014/03/31/java-how-to-schedule-a-task-to-run-in-an-interval/)
因此,我使用它并开发了Java代码,该代码在下面的JLabel(messageLabel)上闪烁3次给定文本。希望这能帮助那里的人。
top-nav-section a:link, a:hover, a:active{}
/*is getting overridden by */
nav-2-section a:link, a:hover, a:active{}.