如何更改制作标签面板每隔几秒就会自行更改?

时间:2014-04-26 14:02:21

标签: java swing jtabbedpane

我目前正在学习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.                   
             }
           }
        });

1 个答案:

答案 0 :(得分:1)

  

我创建了多个选项卡式面板,这些面板都包含有关每个团队的各种信息。

相反,你应该专注于创建一个可以显示团队统计数据的JPanel,而不是JTabbedPanes。如果需要,JPanel可以显示在JTabbedPane中。

我会使用CardLayout交换JPanel,然后使用Swing Timer进行交换。但是,如果您使用单个JPanel来显示统计信息,那么您甚至可以显示一个JPanel,只需更改其中显示的模型(团队统计信息),而不是交换JPanel。

至于什么放在你的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();
  }
});