Newer
Older
democall3 / src / gui / LabelProcessor.java
Mark on 2 Mar 2011 2 KB Done a whole bunch of stuff:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author geoma48p
 */
public class LabelProcessor {

   private Color requestCol = Color.GREEN;
   private Color regularCol = new JLabel().getBackground();
   private Map<Integer, JLabel> labels = new HashMap<Integer, JLabel>();
   private Set<Integer> queue = new LinkedHashSet<Integer>();
   private IMapPanel mapPanel;

   public void processLabels(IMapPanel panel) {
      this.mapPanel = panel;

      processPanel(panel.getPanel());

   }

   private void processPanel(JPanel panel) {
      for (Component component : panel.getComponents()) {

         if (component instanceof JLabel) {
            JLabel label = (JLabel) component;
            try {
               // component must be opaque so the background color can be set
               label.setOpaque(true);
               Integer id = new Integer(label.getText());
               labels.put(id, label);
            } catch (NumberFormatException ignored) {
               // ignored
            }
         } else if (component instanceof JPanel) {
            // found a panel that might contain buttons so recurse
            processPanel((JPanel) component);
         }
      }
   }


   public void request(final int id) {
      queue.add(id);

      String queueStr = queue.toString();

      mapPanel.getQueueLabel().setText(queueStr.substring(1, queueStr.length()-1));

      final JLabel label = labels.get(id);
      EventQueue.invokeLater(new Runnable() {

         public void run() {
            label.setBackground(requestCol);
         }
      });

   }

   public void cancel(int id) {
      queue.remove(id);

      String queueStr = queue.toString();

      mapPanel.getQueueLabel().setText(queueStr.substring(1, queueStr.length()-1));

      final JLabel label = labels.get(id);

      EventQueue.invokeLater(new Runnable() {

         public void run() {
            label.setBackground(regularCol);
         }
      });
   }

   public Set<Integer> getQueue() {
      return queue;
   }
}