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