Java.lang.ArrayIndexOutOfBoundsException: -1

Antes de tudo quero informar-lhes que sou iniciante em java e que esse é o primeiro sistema que desenvolvo.

vejam o código abaixo:

package Grafico;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.*;

import Conexao.Conectar;

public class TelaQuartos extends Janela implements ActionListener {

	public Connection cn = (Connection) Conectar.getConexao();
	PreparedStatement pstq;
	java.sql.ResultSet rs;

	JLabel tiposDeQuartos;
	JLabel txtCodigo;
	JLabel txtDescricao;
	JLabel txtNumero;
	JLabel txtValor;
	JLabel txtTipo;



	String[] tipoDeQuarto = {"", "Clássico - Vista Mar", "Clássico - Vista Resort", "Suite - Vista Mar", "Suite - Vista Resort", "Suite Grande Real"};
	JComboBox tipoQuarto = new JComboBox(tipoDeQuarto); 
	int maxVisibleRows = 5; 

	JTextField campoCodigo;
	JTextArea campoDescricao;
	JTextField campoNumero;
	JTextField campoValor;

	JButton btSalvar;
	JButton btAlterar;
	JButton btExcluir;
	JButton btConsultar;
	JButton btLimpar;
	JButton btVoltar;

	public TelaQuartos(String titulo, Dimension tamanho){

		super(titulo,tamanho);
		getContentPane().setLayout(null);

		tiposDeQuartos = new JLabel("Quartos__________________________");
		tiposDeQuartos.setBounds(50, 10, 800, 60);
		tiposDeQuartos.setFont(new Font("Arial", Font.ITALIC, 36));

		txtCodigo = new JLabel("CÓDIGO");
		txtCodigo.setBounds(50, 100, 70, 20);
		txtCodigo.setFont(new Font("Arial",Font.BOLD ,15));
		campoCodigo = new JTextField();
		campoCodigo.setBounds(120, 97, 55, 20);

		txtNumero = new JLabel("NÚMERO");
		txtNumero.setBounds(210, 100, 70, 20);
		txtNumero.setFont(new Font("Arial",Font.BOLD ,15));
		campoNumero = new JTextField();
		campoNumero.setBounds(290, 97, 55, 20);

		txtTipo = new JLabel("TIPO");
		txtTipo.setBounds(370, 100, 70, 20);
		txtTipo.setFont(new Font("Arial",Font.BOLD ,15));
		tipoQuarto.setBounds(420, 96, 200, 20);

		txtValor = new JLabel("VALOR R$");
		txtValor.setBounds(50, 130, 80, 20);
		txtValor.setFont(new Font("Arial",Font.BOLD ,15));
		campoValor = new JTextField();
		campoValor.setBounds(130, 128, 55, 20);

		txtDescricao = new JLabel("DESCRIÇÃO");
		txtDescricao.setBounds(50, 160, 90, 20);
		txtDescricao.setFont(new Font("Arial",Font.BOLD ,15));
		campoDescricao = new JTextArea();
		campoDescricao.setBounds(150, 157, 350, 150);

		btSalvar = new JButton("Salvar");
		btSalvar.setBounds(160, 350, 90, 30);

		btAlterar = new JButton("Alterar");
		btAlterar.setBounds(270, 350, 90, 30);

		btExcluir = new JButton("Excluir");
		btExcluir.setBounds(380, 350, 90, 30);

		btConsultar = new JButton("Consultar");
		btConsultar.setBounds(550, 130, 90, 40);

		btLimpar = new JButton("Limpar");
		btLimpar.setBounds(550, 200, 90, 40);

		btVoltar = new JButton("Voltar");
		btVoltar.setBounds(550, 270, 90, 40);

		getContentPane().add(tiposDeQuartos);

		getContentPane().add(txtCodigo);
		getContentPane().add(campoCodigo);

		getContentPane().add(txtDescricao);
		getContentPane().add(campoDescricao);

		getContentPane().add(txtNumero);
		getContentPane().add(campoNumero);

		getContentPane().add(txtValor);
		getContentPane().add(campoValor);

		getContentPane().add(txtTipo);
		getContentPane().add(tipoQuarto);

		getContentPane().add(btSalvar);
		getContentPane().add(btAlterar);
		getContentPane().add(btExcluir);
		getContentPane().add(btConsultar);
		getContentPane().add(btLimpar);
		getContentPane().add(btVoltar);

		btVoltar.addActionListener(this);
		btLimpar.addActionListener(this);
		btSalvar.addActionListener(this);

	}
	public static void main(String[] args) {

		TelaLogin.tq.setVisible(true);
	}
	public void actionPerformed(ActionEvent e) {

		if(e.getSource().equals(btVoltar)){
			TelaLogin.tq.dispose();
			TelaLogin.tm.setVisible(true);
		}
		else if(e.getSource().equals(btLimpar));{
			campoCodigo.setText(null);
			campoDescricao.setText(null);
			campoNumero.setText(null);
			campoValor.setText(null);
			tipoQuarto.setSelectedItem(null);
		}
		if(e.getSource().equals(btSalvar)){
			try{
				pstq = (PreparedStatement) cn.prepareStatement("insert into tela_quartos (cod_quarto, desc_quarto, num_quarto, valor_quarto, tipo_quarto) values (null, ?, ?, ?, ?);");     
				pstq.setString(1, campoDescricao.getText());
				pstq.setString(2, campoNumero.getText());
				pstq.setString(3, campoValor.getText());
				pstq.setString(4, tipoDeQuarto[tipoQuarto.getSelectedIndex()]);
				pstq.executeUpdate();				
				JOptionPane.showMessageDialog(null, "Dados cadastrados com êxito");

				campoCodigo.setText(null);
				campoDescricao.setText(null);
				campoNumero.setText(null);
				campoValor.setText(null);
				tipoQuarto.setSelectedItem(null);


			}catch(SQLException erroInserir){
				JOptionPane.showMessageDialog(null, "Erro ao gravar informações\n" + erroInserir);


			}
		}

	}
}

Ao tentar salvar uma incerção de dados aparece a seguinte exceção

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: -1
at Grafico.TelaQuartos.actionPerformed(TelaQuartos.java:153)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Será que alguém pode dar um help?

Já fiz tudo que eu achei que seria ser o problema, mas não consigo fazer funcionar essa tela.

Estou usando eclipse + mysql

[]´s

Linha 153: pstq.setString(4, tipoDeQuarto[tipoQuarto.getSelectedIndex()]);

Existe algum valor selecionado no combo?

O JComboBox retorna o indice -1 quando não há valor selecionado, e -1 é um indice inválido para um array (tipoDeQuarto).

Fugindo um pouco do seu erro, te recomendo dar uma olhada em materiais sobre mvc e camadas de aplicação, pode parecer meio cedo, mas é uma boa =]

Então, eu marco uma opção do jcombobox e coloco valores nos outros campos também, quando clico no botão SALVAR, ele gera esse erro

as opções do combobox estão num array de string…

String[] tipoDeQuarto = {"", "Clássico - Vista Mar", "Clássico - Vista Resort", "Suite - Vista Mar", "Suite - Vista Resort", "Suite Grande Real"};   
    JComboBox tipoQuarto = new JComboBox(tipoDeQuarto);   
    int maxVisibleRows = 5;

Pq será que não esta funcuinando???