Larback - Retornando conhecimento

Vocês podem me obrigar a usar roupas, mas nunca me obrigarão a passá-la

Exemplo de uso dos componentes JCombobox, JFormattedTextField e da interface Keylistener

Qualquer dúvida utilizem o grupo. Bons estudos.
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.ParseException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;
public class Vendas extends JFrame implements ActionListener, KeyListener{  
	private static final long serialVersionUID = 1L;
	JButton jbFecharPedido = new JButton("O.K");  
	JLabel jlProduto = new JLabel("Produto");  
	JLabel jlQuantidade = new JLabel("Quantidade");  
	JLabel jlValor = new JLabel("Valor");  
	JLabel jlTotal = new JLabel("Total");
	JLabel jlData = new JLabel("Data");
	JLabel jlFone = new JLabel("Fone");
	JLabel jlVazio = new JLabel();  
	JTextField jtTotal = new JTextField();  
	JTextField jtValor = new JTextField();  
	JTextField jtQuantidade = new JTextField();
	
	JFormattedTextField jftData, jftTelefone;
	
	String[] produtos = {"Selecione","Calça","Blusa","Short","Bermuda","Boné ABR","Whey Protein","Bombom","Prestobarba","Depirol"};  
	double[] precos   = {0.00,        25.99,  12.99,  10.00,  12.00,    40.00,    190,			  1,		0.75,        20.00   };  
	JComboBox jcProduto = new JComboBox(produtos);	
	
	JMenuBar jmbBarra = new JMenuBar();
	JMenu jmnArquivo = new JMenu("Arquivo");
	JMenuItem jmiFechar = new JMenuItem("Fechar Pedido");
	JMenuItem jmiSair = new JMenuItem("Sair");
	JSeparator js = new JSeparator();
	public Vendas(){  
		super("Atacado Acme");
		
		jmnArquivo.add(jmiFechar);
		jmnArquivo.add(js);
		jmnArquivo.add(jmiSair);
		jmbBarra.add(jmnArquivo);
		setJMenuBar(jmbBarra);
		
		setLayout(new GridLayout(7,2));  
		setDefaultCloseOperation(EXIT_ON_CLOSE);  
		setResizable(false);
		// Programamos o menu com classe interna anonima
		jmiSair.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		jmiFechar.addActionListener(this);
		jbFecharPedido.addActionListener(this);
		
		jcProduto.addActionListener(this);  
		
		jtValor.setDisabledTextColor(Color.BLACK);  
		jtValor.setHorizontalAlignment(JTextField.RIGHT);  
		jtValor.setEnabled(false);  
		
		jtQuantidade.addKeyListener(this);  
		
		jtQuantidade.setHorizontalAlignment(JTextField.RIGHT);  
		jtTotal.setDisabledTextColor(Color.BLACK);  
		jtTotal.setEnabled(false);  
		jtTotal.setHorizontalAlignment(JTextField.RIGHT);
		
		try {
			jftData  = new JFormattedTextField(new MaskFormatter("##/##/####"));
			jftTelefone = new JFormattedTextField(new MaskFormatter("(##) ####-####"));
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		add (jlData);
		add (jftData);
		add (jlFone);
		add(jftTelefone);
		add(jlProduto);  
		add(jcProduto);  
		add(jlValor);  
		add(jtValor);  
		add(jlQuantidade);  
		add(jtQuantidade);  
		add(jlTotal);  
		add(jtTotal);  
		add(jlVazio);  
		add(jbFecharPedido);
		// Ajusta automaticamento o tamanho do container
		pack();
		setLocationRelativeTo(null); 
		setVisible(true);  
	}  
	public static void main(String[] args){  
		new Vendas();  
	}  
	public void actionPerformed(ActionEvent obj){  
		if (obj.getSource()==jcProduto){  
			jtValor.setText(String.valueOf(precos[jcProduto.getSelectedIndex()]));  
			jtQuantidade.setText("");
			jtTotal.setText("");
			jtQuantidade.requestFocus();
		}
		if ((obj.getSource()==jbFecharPedido) || (obj.getSource()==jmiFechar)){
			JOptionPane.showMessageDialog(this, "Venda realizada com sucesso!");
			jtQuantidade.setText("");
			jtTotal.setText("");
			jtValor.setText("");
		}
	} 	
	public void keyPressed(KeyEvent arg0) {
		
	}  
	public void keyTyped(KeyEvent obj) {
	
	}  
	public void keyReleased(KeyEvent obj) {
		
		if (obj.getSource()==jtQuantidade){  
			int quantidade=0;  
			double totalPagar=0;  
			try{ 
				jtQuantidade.setBackground(Color.WHITE);
				quantidade=Integer.parseInt(jtQuantidade.getText());  
				totalPagar=(Double.parseDouble(jtValor.getText()))*quantidade;  
				jtTotal.setText(String.valueOf(totalPagar));  
			}catch(Exception ex){  
				jtQuantidade.setBackground(Color.RED);
				jtTotal.setText("");  
			}  
		}  
	}  
}