簡體   English   中英

使 JLabel 在 java 幾秒后消失

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM