Nessa parte iremos abordar sobre os tratadores de evento de selecionar um item do JComboBox. Ao consultar a documentacao (API), descobrimos como prosseguir diante desta situacao. Ha dois metodos de duas interfaces distintas, respectivamente, ActionListener e ItemListener, que podem ser associados a um JComboBox. Devemos, portanto, criar uma classe que implemente uma dessas interfaces, e instanciar um objeto que sera registrado como o handler de evento.Ambos funcionam, mas e preciso ressaltar a diferenca de comportamento entre ambos. Para cada item selecionado, a selecao de outro item e primeiro removida - entao ocorrem dois ItemEvents quando um item e selecionado. Ou seja, quando voce selecionar um item, este metodo (itemStateChanged) sera disparado duas vezes, ficando propensa a ocorrencia de futuros bugs.Entao, optamos por utilizar um action listener. As duas condicoes dentro do metodo actionPerformed determinam a origem do evento (se ele e oriundo da primeira ou segunda combo box). void addActionListener(ActionListener) : Adiciona um action listener ao combo box. O metodo actionPerformed do listener e chamado quando o usuario seleciona um item do combo box ou, quando num combo box editavel, quando o usuario pressiona Enter.void addItemListener(ItemListener) : Adiciona um item listener ao combo box. O metodo itemStateChanged do listener e chamado quando o estado de selecao de qualquer um dos combo box's muda.import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JOptionPane;public class TesteEventoJComboBox extends JFrame implements ActionListener { JComboBox comboBoxTomMenor; JComboBox comboBoxTomMaior; public TesteEventoJComboBox(){ super("Teste Evento JComboBox"); Container container = this.getContentPane(); container.setLayout(new FlowLayout()); String[] listaAfinacaoMaior = {"Selecione um tom maior","C", "Db", "D", "Eb", "E", "F", "F#", "G", "Ab", "A", "Bb", "B"}; String[] listaAfinacaoMenor = {"Selecione um tom menor","C", "C#", "D", "Eb", "E", "F", "F#", "G", "G#", "A", "Bb", "B"}; comboBoxTomMaior = new JComboBox(listaAfinacaoMaior); container.add(comboBoxTomMaior); comboBoxTomMenor = new JComboBox(listaAfinacaoMenor); container.add(comboBoxTomMenor); comboBoxTomMaior.setEditable(false); comboBoxTomMenor.setEditable(false); comboBoxTomMaior.addActionListener(this); comboBoxTomMenor.addActionListener(this); } public static void main(String[] args) { TesteEventoJComboBox t = new TesteEventoJComboBox(); t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); t.setSize(250, 150); t.setVisible(true); } @Override public void actionPerformed(ActionEvent event) { if(event.getSource() == comboBoxTomMaior){ JOptionPane.showMessageDialog(null, String.format("Voce clicou %s", comboBoxTomMaior.getSelectedItem())); } if(event.getSource() == comboBoxTomMenor) { JOptionPane.showMessageDialog(null, String.format("Voce clicou %s", comboBoxTomMenor.getSelectedItem())); } }}Fontes de ReferenciaDEITEL, H.M; DEITEL, P.J, Java, Como Programar -8aed. Sao Paulo: Prentice Hall, 2010.http://geekycoder.wordpress.com/2008/07/28/tipjava-difference-between-actionlistener-and-itemlistener/http://javafree.uol.com.br/topic-864599-JComboBox-eventos-duplicados.htmlhttp://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#listeners A classe principal que controla a aplicacao e a StringlessGuitarUI. Ela contem as variaveis de instancia que representam os botoes para cada acorde de um tom. No diagrama coloquei apenas uma para servir de exemplo. Logo abaixo, a classe ButtonHandler, onde se encontra a logica de abertura de um arquivo audio, e interna da StringlessGuitarUI. Ela e marcada com um + dentro de um circulo ligados por uma seta.A ButtonFactory e uma classe que encapsula a instanciacao de todos os botoes da tela. ButtonHandler implementa uma interface ouvinte de eventos de clique em um botao - ActionListener. Destaquei o metodo que realiza essa operacao:public void actionPerformed(ActionEvent e) { InputStream in; if(e.getSource() == buttonEm_CMaior){ try{ in = new FileInputStream(new File("C:\\Users\\Thiago\\Downloads\\Em_C Maior.wav")); AudioStream audios = new AudioStream(in); AudioPlayer.player.start(audios); } catch(Exception ex){ JOptionPane.showMessageDialog(null, ex); } }Um destaque para a interacao do usuario com a maquina, ao clicar em um botao. O evento actionPerformed e disparado para a classe que o tratara (ButtonHandler):A classe InputStream instancia um