[英]Make a JLabel disappear after a few seconds in java
所以我想制作某種 JLabel,一旦單擊某些組件,它會在幾秒鍾后出現和消失。 我使用了 Swing 定時器。 這是我處理這個 JLabel 的方法`
public void Clicked(String dialog) {
if(isStarted == true) { //Checking if any other component is clicked
dialogue.setText(dialog);// setting text to the label which is the method argument
}
isStarted = false;
t = new Timer(2500,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialogue.setText("");// disappearing the label after 2.5 seconds
}
});
t.start();
t.setRepeats(false);
isStarted = true;
}
`
它實際上工作正常,但是當我一次單擊 2 個組件時,它開始表現得很奇怪。
Oracle 有一個有用的教程,使用 Swing 創建 GUI 。 跳過學習 Swing 和 NetBeans IDE 部分。 請特別注意Swing 部分中的並發。
我們不會讓JLabel
消失。 我們將JLabel
的文本更改為空白。
我創建了一個簡單的 GUI 來演示如何使用 Swing Timers
。
按下“顯示” JButton
后,將顯示以下文本。
2.5 秒后,將顯示以下文本。
2.5 秒后,文本被清除。
“技巧”是在原始ButtonListener
中設置boolean
,這會導致actionPerformed
方法忽略重復的JButton
按下。 無論您在進程運行時按下JButton
多少次,整個進程都會從頭到尾運行。
這是完整的可運行代碼。 我將額外的 class 設為內部 class,這樣我就可以將代碼作為一個塊發布。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class DisappearingJLabelGUI implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new DisappearingJLabelGUI());
}
private JLabel textLabel;
@Override
public void run() {
JFrame frame = new JFrame("Disappearing JLabel GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel(), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createMainPanel() {
JPanel panel = new JPanel(new GridLayout(0, 1, 5, 5));
panel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
textLabel = new JLabel(" ");
panel.add(textLabel);
JButton button = new JButton("Display");
button.addActionListener(new ButtonListener());
panel.add(button);
return panel;
}
public class ButtonListener implements ActionListener {
private boolean isRunning;
public ButtonListener() {
this.isRunning = false;
}
@Override
public void actionPerformed(ActionEvent event) {
if (!isRunning) {
isRunning = true;
textLabel.setText("Now, you see it.");
Timer timer = new Timer(2500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
Timer timer = (Timer) event.getSource();
timer.stop();
textLabel.setText("Now, you don't.");
timer = new Timer(2500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
Timer timer = (Timer) event.getSource();
timer.stop();
textLabel.setText(" ");
isRunning = false;
}
});
timer.start();
}
});
timer.start();
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.