1   /*  TabBlinker.java
2    *
3    *  Copyright (c) 1998-2001, The University of Sheffield.
4    *
5    *  This file is part of GATE (see http://gate.ac.uk/), and is free
6    *  software, licenced under the GNU Library General Public License,
7    *  Version 2, June 1991 (in the distribution as file licence.html,
8    *  and also available at http://gate.ac.uk/gate/licence.html).
9    *
10   *  Valentin Tablan 30/03/2001
11   *
12   *  $Id: TabBlinker.java,v 1.3 2001/11/07 11:27:33 valyt Exp $
13   *
14   */
15  package gate.gui;
16  
17  import javax.swing.*;
18  import java.awt.Color;
19  import java.awt.Component;
20  
21  public class TabBlinker implements Runnable{
22      public TabBlinker(JTabbedPane pane, Component comp, Color blinkColor){
23        this.tPane = pane;
24        this.tab = tPane.indexOfComponent(comp);
25        this.blinkColor = blinkColor;
26        thread = new Thread(Thread.currentThread().getThreadGroup(),
27                            this,
28                            "TabBlinker1");
29        thread.setPriority(Thread.MIN_PRIORITY);
30      }// TabBlinker(JTabbedPane pane, Component comp, Color blinkColor)
31  
32      public void run(){
33        oldColor = tPane.getBackgroundAt(tab);
34        synchronized(this){
35          stopIt = false;
36        }
37        while(true){
38          synchronized(this){
39            if(tPane.getSelectedIndex() == tab) stopIt = true;
40            if(stopIt){
41              tPane.setBackgroundAt(tab, oldColor);
42              return;
43            }
44          }
45          SwingUtilities.invokeLater(new Runnable(){
46            public void run(){
47              if(tPane.getBackgroundAt(tab).equals(oldColor)){
48                tPane.setBackgroundAt(tab, blinkColor);
49              }else{
50                tPane.setBackgroundAt(tab, oldColor);
51              }
52            }// run()
53          });
54          try {
55            Thread.sleep(400);
56          } catch(InterruptedException ie){}
57        }// while
58      }//run()
59  
60      public void stopBlinking(int foo){
61        synchronized(this){
62          if(thread.isAlive()){
63            stopIt = true;
64          }
65        }
66      }// void stopBlinking()
67  
68      public void startBlinking(){
69        synchronized(this){
70          if(!thread.isAlive()){
71            thread = new Thread(Thread.currentThread().getThreadGroup(),
72                                this,
73                                "TabBlinker2");
74            thread.setPriority(Thread.MIN_PRIORITY);
75            thread.start();
76          }
77        }
78      }// void startBlinking()
79  
80      boolean stopIt;
81      JTabbedPane tPane;
82      int tab;
83      Color blinkColor;
84      Color oldColor;
85      Thread thread;
86    }//class TabBlinker implements Runnable