Update JLabel every X seconds from ArrayList - Java

前端 未结 4 1611
-上瘾入骨i
-上瘾入骨i 2020-11-22 10:17

I have a simple Java program that reads in a text file, splits it by \" \" (spaces), displays the first word, waits 2 seconds, displays the next... etc... I would like to do

4条回答
  •  花落未央
    2020-11-22 10:33

        import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Iterator;
    
    import javax.swing.*;
    
    
    class TimeThis extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private ArrayList words;
        private JTextField _textField;  // set by timer listener
    
        public TimeThis() throws IOException {
    
            _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...");
    
            readFile(); // read file
            printWords(); // print results
        }
    
        public void readFile(){
    
            try {
                BufferedReader in = new BufferedReader(new FileReader("adameve.txt"));
                words = new ArrayList();
                int lineNum = 1; // we read first line in start
    
                // delimeters of line in this example only "space"
                char [] parse = {' '};
                String delims = new String(parse);
    
                String line = in.readLine();
                String [] lineWords = line.split(delims);
    
                // split the words and create word object
                //System.out.println(lineWords.length);
    
                for (int i = 0; i < lineWords.length; i++) {
                    Word w = new Word(lineWords[i]); 
                    words.add(w);                                      
                }
                lineNum++;    // pass the next line
    
                line = in.readLine();
    
                in.close();
    
            } catch (IOException e) {
            }
        }
        private void printWords() {
                final Timer timer = new Timer(100, null);
    
                ActionListener listener = new ActionListener() {
                    private Iterator 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();
    
        }
        class Word{
            private String name;
    
            public Word(String name) {
                this.name = name;
            }
            public String getName() {
                return name;
            }    
        }   
    
        public static void main(String[] args) throws IOException {
            JFrame ani = new TimeThis();
            ani.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            ani.setVisible(true); 
    
        }
    }
    

    I got it working with this code... Hope it can help someone else expand on their Java knowledge. Also, if anyone has any recommendations on cleaning this up. Please do so!

提交回复
热议问题