Programik muzyczny. Nie wiem co wpisać do metody actionPerformed, abym mógł po kliknięciu zaznaczyć wszystkie CheckBoxy na raz. Proszę o pomoc

0

import java.awt.;
import javax.swing.
;
import javax.sound.midi.;
import java.util.
;
import java.awt.event.*;

public class MuzMachina implements MetaEventListener {

JPanel panelGlowny;
ArrayList<JCheckBox> listaPolWyboru;
Sequencer sekwenser;
Sequence sekwencja;
Track sciezka;
JFrame ramkaGlowna;

String[] nazwyInstrumentow = {"Bass Drum", "Closed Hi-Hat",
"Open Hi-Hat","Acoustic Snare", "Crash Cymbal", "Hand Clap",
"High Tom", "Hi Bongo", "Maracas", "Whistle", "Low Conga",
"Cowbell", "Vibraslap", "Low-mid Tom", "High Agogo",
"Open Hi Conga"};
int[] instrumenty = {35,42,46,38,49,39,50,60,70,72,64,56,58,47,67,63};

public static void main (String[] args) {
new MuzMachina().tworzGUI();
}

public void tworzGUI() {
ramkaGlowna = new JFrame("MuzMachina");
ramkaGlowna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BorderLayout uklad = new BorderLayout();
JPanel panelTla = new JPanel(uklad);
panelTla.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

listaPolWyboru = new ArrayList<JCheckBox>();
Box obszarPrzyciskow = new Box(BoxLayout.Y_AXIS);

JButton start = new JButton("Start");
start.addActionListener(new MojStartListener());
obszarPrzyciskow.add(start);         
  
JButton stop = new JButton("Stop");
stop.addActionListener(new MojStopListener());
obszarPrzyciskow.add(stop);

JButton tempoG = new JButton("Szybciej");
tempoG.addActionListener(new MojTempoGListener());
obszarPrzyciskow.add(tempoG);

JButton tempoD = new JButton("Wolniej");
tempoD.addActionListener(new MojTempoDListener());
obszarPrzyciskow.add(tempoD);


JButton zaznaczW = new JButton("Zaznacz wszystko");
zaznaczW.addActionListener(new MojZaznaczWszystkoListener());
obszarPrzyciskow.add(zaznaczW);


Box obszarNazw = new Box(BoxLayout.Y_AXIS);
for (int i = 0; i < 16; i++) {
  obszarNazw.add(new Label(nazwyInstrumentow[i]));
}

panelTla.add(BorderLayout.EAST, obszarPrzyciskow);
panelTla.add(BorderLayout.WEST, obszarNazw);

ramkaGlowna.getContentPane().add(panelTla);
  
GridLayout siatkaPolWyboru = new GridLayout(16,16);
siatkaPolWyboru.setVgap(1);
siatkaPolWyboru.setHgap(2);
panelGlowny = new JPanel(siatkaPolWyboru);
panelTla.add(BorderLayout.CENTER, panelGlowny);

for (int i = 0; i < 256; i++) {                    
  JCheckBox c = new JCheckBox();
  c.setSelected(false);
  listaPolWyboru.add(c);
  panelGlowny.add(c);            
} // koniec pętli

konfigurujMidi();

ramkaGlowna.setBounds(50,50,300,300);
ramkaGlowna.pack();
ramkaGlowna.setVisible(true);

} // koniec metody

public void konfigurujMidi() {
try {
sekwenser = MidiSystem.getSequencer();
sekwenser.open();
sekwenser.addMetaEventListener(this);
sekwencja = new Sequence(Sequence.PPQ,4);
sciezka = sekwencja.createTrack();
sekwenser.setTempoInBPM(120);

} catch(Exception e) {e.printStackTrace();}

} // koniec metody

public void utworzSciezkeIOdtworz() {
int[] listaSciezki = null;

sekwencja.deleteTrack(sciezka);
sciezka = sekwencja.createTrack();

// teraz analizujemy wszystkie pola wyboru i dla 
// zaznaczonych tworzymy zdarzenia MIDI
for (int i = 0; i < 16; i++) {
  listaSciezki = new int[16];

  int klucz = instrumenty[i];   

  for (int j = 0; j < 16; j++ ) {         
    JCheckBox jc = (JCheckBox) listaPolWyboru.get(j + (16*i));
    if ( jc.isSelected()) {
      listaSciezki[j] = klucz;
    } else {
      listaSciezki[j] = 0;
    }                    
  } // koniec pętli wewnętrznej
 
  utworzSciezke(listaSciezki);
} // koniec pętli zewnętrznej

sciezka.add(tworzZdarzenie(192,9,1,0,15));      

try {
  sekwenser.setSequence(sekwencja);                    
  sekwenser.start();
} catch(Exception e) {e.printStackTrace();}

} // koniec metody

public class MojStartListener implements ActionListener {
public void actionPerformed(ActionEvent a) {
utworzSciezkeIOdtworz();
}
} // koniec klasy wewnętrznej

public class MojStopListener implements ActionListener {
public void actionPerformed(ActionEvent a) {
sekwenser.stop();
}
} // koniec klasy wewnętrznej

public class MojTempoGListener implements ActionListener {
public void actionPerformed(ActionEvent a) {
float wspTempa = sekwenser.getTempoFactor();
sekwenser.setTempoFactor((float)(wspTempa * 1.03));
}
} // koniec klasy wewnętrznej

public class MojTempoDListener implements ActionListener {
public void actionPerformed(ActionEvent a) {
float wspTempa = sekwenser.getTempoFactor();
sekwenser.setTempoFactor((float)(wspTempa * .97));
}
} // koniec klasy wewnętrznej

public class MojZaznaczWszystkoListener implements ActionListener {
public void actionPerformed(ActionEvent a) { //tutaj potrzebna pomoc
for (int i = 0; i < 256; i++) {
JCheckBox c = new JCheckBox();
c.setSelected(false);
listaPolWyboru.add(c);
panelGlowny.add(c);
} // koniec pętli
}
} // koniec klasy wewnętrznej

public void utworzSciezke(int[] lista) {

for (int i = 0; i < 16; i++) {
  int klucz = lista[i];

  if (klucz != 0) {
    sciezka.add(tworzZdarzenie(144,9,klucz, 100, i));
    sciezka.add(tworzZdarzenie(128,9,klucz, 100, i+1));
  }
}

}

public static MidiEvent tworzZdarzenie(int plc, int kanal, int jeden, int dwa, int takt) {
MidiEvent zdarzenie = null;
try {
ShortMessage a = new ShortMessage();
a.setMessage(plc, kanal, jeden, dwa);
zdarzenie = new MidiEvent(a, takt);
} catch(Exception e) { e.printStackTrace(); }
return zdarzenie;
} // koniec metody

public void meta(MetaMessage arg0) {
}
} // koniec klasy

0

po pierwsze sformatuj to po ludzku.
po drugie robisz to bardzo niskopoziomowo, bez jakiś klas pośrednich, które ujmują to w jakieś abstrakcję
po trzecie komentarz //koniec pętli albo podobny świadczy fatalnie o opanowaniu kodu. Być może takie komentarze nanosi się z rozpaczy, GDY KOD jest żle SFORMATOWANY

1 użytkowników online, w tym zalogowanych: 0, gości: 1