Как изменить, чтобы панели с вкладками менялись каждые несколько секунд?

1

В настоящее время я изучаю Swing и пытаюсь создать простую программу, которая хранит информацию о различных спортивных командах.

Я создал несколько панелей с вкладками, которые содержат всю информацию о каждой команде. Я хотел бы иметь кнопку, которая при нажатии показывает каждую панель с вкладками каждые 10 секунд или около того - вид эффекта слайд-шоу.

Я прочитал о прослушивании действий, но не потратил на них много времени, так как у меня возникли проблемы с реализацией этого. Я был бы очень благодарен, если бы кто-нибудь мог помочь мне или просто дать мне толчок в правильном направлении. Я опубликовал фрагмент кода, который я попытался, но я не понимаю, что на самом деле поставить внутри цикла, чтобы достичь этого.

      slides.addActionListener(new ActionListener()
        public void actionPerformed(ActionEvent actionEvent){
            for(int i = 0; i<arrayList.size(); i++)
             {
              //code that changes the tabbed panels every few seconds.                   
             }
           }
        });
Теги:
swing
jtabbedpane

1 ответ

1
Лучший ответ

Я создал несколько панелей с вкладками, которые содержат различную информацию о каждой команде.

Скорее вы должны сосредоточиться на создании JPanel, который может отображать статистику команды, а не столько JTabbedPanes. Затем JPanel может отображаться в JTabbedPane, если это необходимо.

Я бы использовал CardLayout для обмена JPanels, а затем Swing Timer, чтобы выполнить обмен. Однако, если вы используете один JPanel для отображения статистики, вы можете даже отобразить один JPanel и просто изменить отображаемую в нем модель (информация о статистике группы), а не свопировать JPanels.

Что касается того, что добавить в свой ActionListener, это будет не цикл for, а скорее Swing Timer, и вы можете прочитать об этом здесь: Swing Timer Tutorial.

например,

slides.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent actionEvent){ 
    int timerDelay = 10 * 1000; // 10 seconds
    new Timer(timerDelay, new ActionListener() {
      private int count = 0;
      public void actionPerformed(ActionEvent evt){ 
        if (count < maxCount) {
          // code to show the team data for the count index
          count++;
        } else {
          ((Timer) evt.getSource()).stop(); // stop timer
        }
      }
    }).start();
  }
});
  • 0
    Спасибо за такой информативный ответ. Я только что натолкнулся на вопрос, который дает аналогичный подход. Цикл for был моим первоначальным подходом, так как это все, с чем я знаком на данный момент, но я медленно учусь. Отличный ответ, я могу изучить это более подробно и понять это. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню