加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从ArrayList – Java每X秒更新一次JLabel

发布时间:2020-12-15 04:56:06 所属栏目:Java 来源:网络整理
导读:我有一个简单的 Java程序,它读入一个文本文件,用“”(空格)分割,显示第一个单词,等待2秒,显示下一个…等…我想在Spring中执行此操作或一些其他的GUI. 关于如何用spring轻松更新单词的任何建议?迭代我的列表并以某种方式使用setText(); 我没有运气.我正在使
我有一个简单的 Java程序,它读入一个文本文件,用“”(空格)分割,显示第一个单词,等待2秒,显示下一个…等…我想在Spring中执行此操作或一些其他的GUI.

关于如何用spring轻松更新单词的任何建议?迭代我的列表并以某种方式使用setText();

我没有运气.我正在使用这种方法在consol中打印我的单词并将JFrame添加到它…在consol中工作得很好,但是输出了无穷无尽的jframe.我在网上找到了大部分内容.

private void printWords() {
        for (int i = 0; i < words.size(); i++) {
            //How many words?
            //System.out.print(words.size());
            //print each word on a new line...
            Word w = words.get(i);
            System.out.println(w.name);

            //pause between each word.
            try{
                Thread.sleep(500);
            } 
            catch(InterruptedException e){
                e.printStackTrace();
            }
         JFrame frame = new JFrame("Run Text File"); 
         frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); 
         JLabel textLabel = new JLabel(w.name,SwingConstants.CENTER);
         textLabel.setPreferredSize(new Dimension(300,100)); 
         frame.getContentPane().add(textLabel,BorderLayout.CENTER);
        //Display the window. frame.setLocationRelativeTo(null); 
         frame.pack(); 
         frame.setVisible(true);
        }
    }

我有一个用JFrame和JLable创建的窗口,但是,我希望静态文本是动态的,而不是加载一个新的弹簧窗口.我想它闪现一个字,消失,闪现一个字消失.

有关如何更新JLabel的任何建议?什么与重绘()?我画了一个空白.

谢谢!

更新:
在下面的亲切的帮助下,我已经让它正确打印到控制台.这是我的打印方法:

private void printWords() {
            final Timer timer = new Timer(500,null);
            ActionListener listener = new ActionListener() {
                private Iterator<Word> w = words.iterator();
                @Override 
                public void actionPerformed(ActionEvent e) {
                    if (w.hasNext()) {
                        _textField.setText(w.next().getName());
                        //Prints to Console just Fine...
                        //System.out.println(w.next().getName());
                    }
                    else {
                        timer.stop();
                    }
                }
            };
            timer.addActionListener(listener);
            timer.start();

    }

但是,它没有更新标签?我的构造函数看起来像:

public TimeThis() {

    _textField = new JTextField(5);
    _textField.setEditable(false);
    _textField.setFont(new Font("sansserif",Font.PLAIN,30));

    JPanel content = new JPanel();
    content.setLayout(new FlowLayout());
    content.add(_textField); 

    this.setContentPane(content);
    this.setTitle("Swing Timer");
    this.pack();
    this.setLocationRelativeTo(null);
    this.setResizable(false);
    //_textField.setText("loading...");

}

到达那里……一旦我或者任何人帮助我,我会发布修复,让它发挥作用.再次感谢!

解决方法

首先,构建并显示GUI.显示GUI后,使用 javax.swing.Timer每500毫秒更新一次GUI:

final Timer timer = new Timer(500,null);
ActionListener listener = new ActionListsner() {
    private Iterator<Word> it = words.iterator();
    @Override 
    public void actionPerformed(ActionEvent e) {
        if (it.hasNext()) {
            label.setText(it.next().getName());
        }
        else {
            timer.stop();
        }
    }
};
timer.addActionListener(listener);
timer.start();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读