Witam na forum w swoim pierwszym poście,

Piszę program, syntezator który generuje dźwięki.
Kreowanie dźwięku polega na manipulowaniu kontrolerami:
pokrętłami (klasa Knobs) i przyciskami (klasa Triggers) albo na wczytaniu gotowego presetu z JComboboxa, który zmienia odpowiednio stany wszystkich kontrolerów.

Mam problem z klasą Triggers, która jest po prostu JPanelem z czterema Buttonami i obrazkiem.
Obrazek się zmienia, w zależności który Button wciśnięty. Ten obrazek to coś jak takie świecące diody.

Tak to wygląda:

S708.gif

O ile wszystko ładnie działa klikając odpowiednio w Buttony lub kręcąc pokrętłami
to przy wczytaniu presetów z JComboboxa nie chcą się podmieniać te obrazki w klasie Triggers.
Pokrętła ładnie działają przy zmianie preseta z JCombobox.
W przypadku przycisków, jeśli się zmienia preset JComboboxem zmiana kontrolera następuje (zmienia się dźwięk)
lecz w JPanelu nie podmienia się własciwy obrazek.

Jako zarządcę rozkładu używam TableLayout.

Fragmenty kodu okna głównego Okno

//wcześniej zadeklarawano
private Triggers[] triggers = new Triggers[numTriggers];
private int numKnobs = 12;
private int numTriggers = 6;

private int ctrlKnobs[] = {24, 23, 8, 7, 16, 17, 18, 25, 26, 2, 1, 0}; // to są id kontrolerów, piewsze pokrętło jest kontrolerem id = 24
private int ctrlTriggers[] = {14, 15, 9, 10, 11, 12};// analogicznie jak wyżej 


/*
 * Fragmenty kodu z konstruktora Okno
 */
// triggers
    for (int t = 0; t < numTriggers; t++) {
          
      int tvalue = 1;
      String tstr = Integer.toString(tvalue);
      JPanel panelTrig = new JPanel(new BorderLayout());
     
      etykieta[t] = new JLabel(tstr, 4);
      panelTrig.add(etykieta[t]);
      final JLabel et = etykieta[t];
      
   
    triggers[t].addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
            Triggers tr = (Triggers) e.getSource();
            int vol;
            
            vol = (int) tr.getValue();
            et.setText(Integer.toString(vol));
            
          }
        });
    
    panelTrig.add(triggers[t],BorderLayout.LINE_START);
    frame.add(panelTrig, position[numKnobs   + t]);
    }
	
	
	// JCOMBOBOX
        JPanel pCombo = new JPanel();
        pCombo.setLayout(new FlowLayout());
        final JLabel[] jlbc = new JLabel[27];
        for (int k=0; k<27;k++)// do JLabel przy JComboBox
        {
        pCombo.add(labcomb[k] = new JLabel(s, 4), BorderLayout.WEST);
        jlbc[k]=labcomb[k];
        }
        PresetsCombo combo = new PresetsCombo();
        combo.addChangeListener(new ChangeListener() {

          public void stateChanged(ChangeEvent e) {
            PresetsCombo presetcombo = (PresetsCombo) e.getSource();
            int val, tval;
            float fval;
         
           
            
            //pokrętła (Knobs)
           for (int col=0; col<numKnobs;col++)  
            {
         
            val= (int) Math.round(presetcombo.getValue(ctrlKnobs[col]));//ok
            jlbc[ctrlKnobs[col]].setText(Integer.toString(val));//jlabel combo
             //synthesizer.setController(ctrlKnobs[col],val);// zmienia kontrolery
               fval = ((float) val)/127;
               ts[col].setValue(fval);
           
            } 
           

  
           //przyciski (Triggers)
            for (int tcol=0; tcol<numTriggers;tcol++)   
            {
              
               tval = (int) presetcombo.getValue(ctrlTriggers[tcol]);//ok
               jlbc[ctrlTriggers[tcol]].setText(Integer.toString(tval));//jlabel combo
               //synthesizer.setController(ctrlTriggers[col],tval);// zmienia kontrolery = ok
               etykieta[tcol].setText(Integer.toString(tval)); // jlabel gui pod przelacznikiem - pomocniczo
               triggers[tcol].setValue(tval); // TU JEST COŚ NIE TAK
              
        
               
          }  

Klasę Triggers wklejam całą:

import layout.TableLayout;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Triggers extends JPanel
        implements ActionListener, ItemListener {

   
   public Triggers(String s[], String name) {
      
      JPanel panel = new JPanel(new TableLayout(size));
      this.value = Integer.parseInt(s[selected]);

      for (int i = 0; i < s.length; i++) {
         

         ImageIcon cup = new ImageIcon();
         button[i] = new JButton(z[i], cup);

         Font font = button[i].getFont();
         button[i].setFont(new Font(font.getFontName(), font.getStyle(), 8));
         button[i].setActionCommand(s[i]);

         if (i == selected) {
            button[i].setSelected(true);
         } else {
            button[i].setSelected(false);
         }
      }


     
      ButtonGroup group = new ButtonGroup();

      for (int i = 0; i < s.length; i++) {
         group.add(button[i]);
         button[i].addActionListener(this);
         button[i].addItemListener(this);
      }



      diody = new JLabel(createImageIcon("/resources/diody/"
              + this.value
              + ".png"));
      

      diody.setPreferredSize(new Dimension(16, 80));

      JPanel triggs = new JPanel(new TableLayout(sizeB));
      triggs.setPreferredSize(new Dimension(60, 90));

      for (int i = 0; i < s.length; i++) {
         triggs.add(button[i], positionTrig[i]);
      }


      panel.add(triggs, position[0]);
      panel.add(diody, position[1]);

      TitledBorder titledborder = BorderFactory.createTitledBorder(name);
      titledborder.setTitleJustification(1);
      panel.setBorder(titledborder);
      add(panel);

      
   }


   public void actionPerformed(ActionEvent e) {
    
       cmd = e.getActionCommand();
      diody.setIcon(createImageIcon("/resources/diody/"
              + cmd
              + ".png"));



      if (cmd.equals("1")) {

         setValue(1);

      } else if (cmd.equals("2")) {

         setValue(2);

      } else if (cmd.equals("3")) {

         setValue(3);

      } else if (cmd.equals("4")) {

         setValue(4);
      }

   }

  
   public static ImageIcon createImageIcon(String path) {
      java.net.URL imgURL = Triggers.class.getResource(path);
      if (imgURL != null) {
         return new ImageIcon(imgURL);
      } else {
         System.err.println("Couldn't find file: " + path);
         return null;
      }
   }

   public int setController() {
      return value;
   }

   public void setValue(int k) {

      this.value = k;
      cmd =  Integer.toString(this.value);
      repaint();
      fireChangeEvent();
     
   }

   public int getValue() {


      return this.value;
   }

   public void setSel(int k) {
      selected = k;


      repaint();
      fireChangeEvent();
   }

   public void itemStateChanged(ItemEvent ie) {
      String s = (String) ie.getItem();
   

   }

   public void addChangeListener(ChangeListener cl) {
      listenerList.add(ChangeListener.class, cl);

   }

   public void removeChangeListener(ChangeListener cl) {
      listenerList.remove(ChangeListener.class, cl);
   }

   protected void fireChangeEvent() {
      
      Object[] listeners = listenerList.getListenerList();

      for (int i = listeners.length - 2; i >= 0; i -= 2) {
         if (listeners[i] == ChangeListener.class) {
            
            if (changeEvent == null) {
               changeEvent = new ChangeEvent(this);
            }
            ((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
         }
      }
   }
   private ChangeEvent changeEvent = null;
   private EventListenerList listenerList = new EventListenerList();
   private JLabel diody;
   private int x = 1;
   private int y = 4;
   private JButton button[] = new JButton[y];
   private String positionTrig[] = { //dane do TableLayout
      "1, 1, 1, 1",
      "1, 3, 1, 3",
      "1, 5, 1, 5",
      "1, 7, 1, 7"
   };
   private String position[] = {
      "1, 1, 1, 1",
      "3, 1, 3, 1"
   };
   double border = 4;
   double vborder = 1;
   int controller[] = new int[4];
   String z[] = {"1", "2", "3", "4"};
   double size[][] = {
      {1, 0.75, 1, 0.25, 1},
      {1, 0.9999, 1}
   };
   double sizeB[][] = {
      {1, 0.9999, 1},
      {4, 0.24, 2, 0.24, 2, 0.24, 2, 0.24, 1}
   };
   private int selected;
   private int value;
   private String  cmd;
}
 

Czy rzuciłby ktoś swoim fachowym okiem co może być nie tak?