Обновление JLabel каждые X секунд из ArrayList – Java

У меня есть простая Java-программа, которая читает в текстовом файле, разбивает ее на «» (пробелы), отображает первое слово, ждет 2 секунды, отображает следующее … и т. Д. Я бы хотел сделать это весной или другой графический интерфейс.

Любые предложения о том, как я могу легко обновить слова весной? Перейдите в мой список и как-то используйте setText ();

Мне не повезло. Я использую этот метод для вывода своих слов в консоль и добавил к нему JFrame … Отлично работает в консоли, но выдает бесконечную 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? Что-то с repaint ()? Я рисую пробел.

Благодаря!

ОБНОВЛЕНИЕ: С помощью добрых людей ниже, я получил его для правильной печати на консоли. Вот мой метод печати:

 private void printWords() { final Timer timer = new Timer(500, 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(); } 

Однако он не обновляет информацию? Мой конструктор выглядит так:

 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..."); } 

Как добраться … Я отправлю исправление, как только я, или кто-нибудь мне поможет, получится, что это работает. Еще раз спасибо!

Сначала создайте и покажите свой графический интерфейс. После отображения графического интерфейса используйте javax.swing.Timer для обновления графического интерфейса каждые 500 миллисекунд:

 final Timer timer = new Timer(500, null); ActionListener listener = new ActionListsner() { private Iterator 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(); 

Никогда не используйте Thread.sleep(int) внутри Swing Code, потому что он блокирует EDT; здесь ,

Результатом использования Thread.sleep(int) является следующее:

введите описание изображения здесь

Когда Thread.sleep(int) заканчивается

введите описание изображения здесь

Пример кода:

 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.util.LinkedList; import java.util.Queue; import java.util.Random; import javax.swing.*; //http://stackoverflow.com/questions/7943584/update-jlabel-every-x-seconds-from-arraylistlist-java public class ButtonsIcon extends JFrame implements Runnable { private static final long serialVersionUID = 1L; private Queue iconQueue = new LinkedList(); private JLabel label = new JLabel(); private Random random = new Random(); private JPanel buttonPanel = new JPanel(); private JPanel labelPanel = new JPanel(); private Timer backTtimer; private Timer labelTimer; private JLabel one = new JLabel("one"); private JLabel two = new JLabel("two"); private JLabel three = new JLabel("three"); private final String[] petStrings = {"Bird", "Cat", "Dog", "Rabbit", "Pig", "Fish", "Horse", "Cow", "Bee", "Skunk"}; private boolean runProcess = true; private int index = 1; private int index1 = 1; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ButtonsIcon t = new ButtonsIcon(); } }); } public ButtonsIcon() { iconQueue.add(UIManager.getIcon("OptionPane.errorIcon")); iconQueue.add(UIManager.getIcon("OptionPane.informationIcon")); iconQueue.add(UIManager.getIcon("OptionPane.warningIcon")); iconQueue.add(UIManager.getIcon("OptionPane.questionIcon")); one.setFont(new Font("Dialog", Font.BOLD, 24)); one.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); two.setFont(new Font("Dialog", Font.BOLD, 24)); two.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); three.setFont(new Font("Dialog", Font.BOLD, 10)); three.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); labelPanel.setLayout(new GridLayout(0, 3, 4, 4)); labelPanel.add(one); labelPanel.add(two); labelPanel.add(three); //labelPanel.setBorder(new LineBorder(Color.black, 1)); labelPanel.setOpaque(false); JButton button0 = createButton(); JButton button1 = createButton(); JButton button2 = createButton(); JButton button3 = createButton(); buttonPanel.setLayout(new GridLayout(0, 4, 4, 4)); buttonPanel.add(button0); buttonPanel.add(button1); buttonPanel.add(button2); buttonPanel.add(button3); //buttonPanel.setBorder(new LineBorder(Color.black, 1)); buttonPanel.setOpaque(false); label.setLayout(new BorderLayout()); label.add(labelPanel, BorderLayout.NORTH); label.add(buttonPanel, BorderLayout.SOUTH); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); label.setPreferredSize(new Dimension(d.width / 3, d.height / 3)); add(label, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); startBackground(); startLabel2(); new Thread(this).start(); printWords(); // generating freeze Swing GUI durring EDT } private JButton createButton() { JButton button = new JButton(); button.setBorderPainted(false); button.setBorder(null); button.setFocusable(false); button.setMargin(new Insets(0, 0, 0, 0)); button.setContentAreaFilled(false); button.setIcon(nextIcon()); button.setRolloverIcon(nextIcon()); button.setPressedIcon(nextIcon()); button.setDisabledIcon(nextIcon()); nextIcon(); return button; } private Icon nextIcon() { Icon icon = iconQueue.peek(); iconQueue.add(iconQueue.remove()); return icon; } // Update background at 4/3 Hz private void startBackground() { backTtimer = new javax.swing.Timer(750, updateBackground()); backTtimer.start(); backTtimer.setRepeats(true); } private Action updateBackground() { return new AbstractAction("Background action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { label.setIcon(new ImageIcon(getImage())); } }; } // Update Label two at 2 Hz private void startLabel2() { labelTimer = new javax.swing.Timer(500, updateLabel2()); labelTimer.start(); labelTimer.setRepeats(true); } private Action updateLabel2() { return new AbstractAction("Label action") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) { two.setText(petStrings[index]); index = (index + 1) % petStrings.length; } }; } // Update lable one at 3 Hz @Override public void run() { while (runProcess) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { one.setText(petStrings[index1]); index1 = (index1 + 1) % petStrings.length; } }); try { Thread.sleep(300); } catch (Exception e) { e.printStackTrace(); } } } // Note: blocks EDT private void printWords() { for (int i = 0; i < petStrings.length; i++) { String word = petStrings[i].toString(); System.out.println(word); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } three.setText(word); } three.setText(" Concurency Issues in Swing
" + " never to use Thread.sleep(int)
" + " durring EDT, simple to freeze GUI "); } public BufferedImage getImage() { int w = label.getWidth(); int h = label.getHeight(); GradientPaint gp = new GradientPaint(0f, 0f, new Color( 127 + random.nextInt(128), 127 + random.nextInt(128), 127 + random.nextInt(128)), w, w, new Color(random.nextInt(128), random.nextInt(128), random.nextInt(128))); BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = bi.createGraphics(); g2d.setPaint(gp); g2d.fillRect(0, 0, w, h); g2d.setColor(Color.BLACK); return bi; } }
  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); } } 

Я получил его работу с этим кодом … Надеюсь, он может помочь кому-то еще расширить свои знания Java. Кроме того, если у кого-то есть рекомендации по его очистке. Пожалуйста, сделай так!

Вы на правильном пути, но вы создаете фрейм внутри цикла, а не снаружи. Вот как это должно выглядеть:

 private void printWords() { JFrame frame = new JFrame("Run Text File"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel textLabel = new JLabel("", 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); 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(); } textLabel.setTest(w.name); } } 
  • VBA Macro On Timer для запуска кода с каждым заданным количеством секунд, то есть 120 секунд
  • Interesting Posts

    Как проверить, не поврежден ли корпус или не удался жесткий диск?

    Заказ объявлений с конкретными поставщиками CSS

    Обновление вложенных массивов в mongoDB через mongo shell

    Действия controllerа ASP.NET MVC, которые возвращают JSON или частичный html

    Есть ли комбинация клавиш для «Открыть местоположение файла» в Windows Search?

    Откуда произошло: пустое название?

    Как удалить стандартное свечение границы кнопки JavaFX (если выбрано)?

    Уменьшение размера файла базы данных MongoDB

    Угловой JS: как привязываться к обещаниям

    Невозможно получить чешских персонажей при создании PDF-файла

    Контекст данных EF – Async / Await & Multithreading

    Невозможно установить контент-тип в ‘application / json’ в jQuery.ajax

    Разница между `set`,` setq` и `setf` в Common Lisp?

    Веб-страница работает в IE, Chrome и Firefox, но не при использовании элемента управления .NET WebBrowser

    Почему Thunar не создает и не показывает миниатюры изображений?

    Давайте будем гением компьютера.