Habilitar e Desabilitar Campos - Java

Boa tarde galera!!

Minha duvida é o seguinte, tenho uma classe de formulário, chamada FormularioPadrão, basicamente ela será igual para todos o formulários do sistema, mudando apenas alguns JTextFields e JLabel, de um formulário para o outro.

Formulário Padrão:

Código do Formulário Padrão:

public abstract class FormularioPadrao extends JInternalFrame {

	private static final long serialVersionUID = -5947675427044523401L;
	
	abstract public void inicializarComponentes() throws ParseException;

	private JButton btnNovo = new JButton("Novo");
	private JButton btnAlterar = new JButton("Alterar");
	private JButton btnExluir = new JButton("Excluir");
	private JButton btnSalvar = new JButton("Salvar");
	private JButton btnCancelar = new JButton("Cancelar");
	private JButton btnFechar = new JButton("Fechar");

	JPanel painelBotoes = new JPanel();
	public JPanel painelFormulario = new JPanel();
	public JPanel painelConsulta = new JPanel();

	private JTextField txtID;

	JLabel lblID = new JLabel("ID:");

	private final JLabel lblBuscarCliente = new JLabel("Buscar:");
	private final JTextField textField = new JTextField();
	
	

	public FormularioPadrao() throws ParseException {
		
		inicializarComponentes();
		
		textField.setBounds(66, 28, 802, 25);
		textField.setColumns(10);

		setClosable(true);
		setBounds(100, 100, 906, 689);
		getContentPane().setLayout(null);

		painelBotoes.setBounds(10, 11, 870, 36);
		getContentPane().add(painelBotoes);
		painelBotoes.setLayout(null);

		btnNovo.setIcon(
				new ImageIcon(FormularioPadrao.class.getResource("/br/bom/fjsistemas/imagens/NovoCliente.png")));
		btnNovo.setBounds(0, 11, 116, 23);
		btnNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				habilitaBotoes(false);
				
			}
		});
		painelBotoes.add(btnNovo);

		btnAlterar.setIcon(new ImageIcon(FormularioPadrao.class.getResource("/br/bom/fjsistemas/imagens/Alterar.png")));
		btnAlterar.setBounds(126, 11, 116, 23);
		btnAlterar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitaBotoes(false);
			}
		});
		painelBotoes.add(btnAlterar);

		btnExluir.setIcon(new ImageIcon(FormularioPadrao.class.getResource("/br/bom/fjsistemas/imagens/Excluir.png")));
		btnExluir.setBounds(252, 11, 116, 23);
		painelBotoes.add(btnExluir);

		btnSalvar.setIcon(new ImageIcon(FormularioPadrao.class.getResource("/br/bom/fjsistemas/imagens/Salvar.png")));
		btnSalvar.setBounds(378, 11, 116, 23);
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitaBotoes(true);
			}
		});
		painelBotoes.add(btnSalvar);

		btnCancelar.setIcon(new ImageIcon(FormularioPadrao.class.getResource("/br/bom/fjsistemas/imagens/cancel.png")));
		btnCancelar.setBounds(504, 11, 116, 23);
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitaBotoes(true);
			}
		});
		painelBotoes.add(btnCancelar);

		btnFechar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnFechar.setIcon(new ImageIcon(FormularioPadrao.class.getResource("/br/bom/fjsistemas/imagens/Fechar.png")));
		btnFechar.setBounds(630, 11, 116, 23);
		painelBotoes.add(btnFechar);

		painelFormulario.setBorder(new TitledBorder(
				new EtchedBorder(EtchedBorder.LOWERED, new Color(255, 255, 255), new Color(160, 160, 160)),
				"", TitledBorder.CENTER, TitledBorder.TOP, null, new Color(0, 0, 0)));
		painelFormulario.setBounds(10, 54, 870, 166);
		getContentPane().add(painelFormulario);
		painelFormulario.setLayout(null);

		lblID.setBounds(10, 21, 46, 25);
		painelFormulario.add(lblID);

		txtID = new JTextField();
		txtID.setBounds(55, 18, 58, 25);
		txtID.setEnabled(false);
		painelFormulario.add(txtID);
		txtID.setColumns(10);

		painelConsulta.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));

		painelConsulta.setBounds(10, 231, 870, 417);
		getContentPane().add(painelConsulta);
		painelConsulta.setLayout(null);
		lblBuscarCliente.setBounds(10, 31, 46, 14);

		painelConsulta.add(lblBuscarCliente);

		painelConsulta.add(textField);

	}

	public void habilitaBotoes(boolean estado) {

		btnNovo.setEnabled(estado);
		btnAlterar.setEnabled(estado);
		btnExluir.setEnabled(estado);
		btnSalvar.setEnabled(!estado);
		btnCancelar.setEnabled(!estado);

	}
}

Formulario Cadatro de Cliente(que herda Formulario Padrao)

Código Classe Cadastro Cliente:

public class CadastroDeCliente extends FormularioPadrao {

	private static final long serialVersionUID = 2998773983648517050L;

	JLabel jlNome;
	JLabel jlSexo;
	JLabel jlCPF;
	JLabel jlRG;
	JLabel jlEndereco;
	JLabel jlBairro;
	JLabel jlNumero;
	JLabel jlCidade;
	JLabel jlEstado;
	JLabel jlTelefone;
	JLabel jlCelular;

	JComboBox<String> jcSexo;
	JComboBox<String> jcEstado;

	JFormattedTextField jftCPF;
	JFormattedTextField jftRG;
	JFormattedTextField jftTelefone;
	JFormattedTextField jftCelular;

	JTextField txtNome;
	JTextField txtEndereco;
	JTextField txtBairro;
	JTextField txtNumero;
	JTextField txtCidade;
	
	public CadastroDeCliente() throws ParseException {
		setTitle("Cadastro de Clientes");
	}

	@Override
	public void inicializarComponentes() throws ParseException {

		jlNome = new JLabel("Nome:");
		jlNome.setBounds(9, 50, 50, 25);
		painelFormulario.add(jlNome);

		txtNome = new JTextField("");
		txtNome.setBounds(55, 50, 300, 25);
		painelFormulario.add(txtNome);

		jlSexo = new JLabel("Sexo:");
		jlSexo.setBounds(370, 50, 50, 25);
		painelFormulario.add(jlSexo);

		jcSexo = new JComboBox<String>();
		jcSexo.setBounds(410, 50, 100, 25);
		jcSexo.addItem("Selecione");
		jcSexo.addItem("Masculino");
		jcSexo.addItem("Feminino");
		painelFormulario.add(jcSexo);

		jlCPF = new JLabel("CPF:");
		jlCPF.setBounds(525, 50, 50, 25);
		painelFormulario.add(jlCPF);

		jftCPF = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
		jftCPF.setBounds(560, 50, 100, 25);
		painelFormulario.add(jftCPF);

		jlRG = new JLabel("RG:");
		jlRG.setBounds(675, 50, 100, 25);
		painelFormulario.add(jlRG);

		jftRG = new JFormattedTextField(new MaskFormatter("##.###.###-#"));
		jftRG.setBounds(705, 50, 100, 25);
		painelFormulario.add(jftRG);

		jlEndereco = new JLabel("Endereço:");
		jlEndereco.setBounds(10, 85, 57, 25);
		painelFormulario.add(jlEndereco);

		txtEndereco = new JTextField();
		txtEndereco.setBounds(75, 85, 279, 25);
		painelFormulario.add(txtEndereco);

		jlNumero = new JLabel("Nº:");
		jlNumero.setBounds(370, 85, 50, 25);
		painelFormulario.add(jlNumero);

		txtNumero = new JTextField();
		txtNumero.setBounds(394, 85, 60, 25);
		painelFormulario.add(txtNumero);

		jlBairro = new JLabel("Bairro:");
		jlBairro.setBounds(465, 85, 250, 25);
		painelFormulario.add(jlBairro);

		txtBairro = new JTextField();
		txtBairro.setBounds(510, 85, 295, 25);
		painelFormulario.add(txtBairro);

		jlCidade = new JLabel("Cidade:");
		jlCidade.setBounds(10, 120, 150, 25);
		painelFormulario.add(jlCidade);

		txtCidade = new JTextField();
		txtCidade.setBounds(60, 120, 180, 25);
		painelFormulario.add(txtCidade);

		jlEstado = new JLabel("Estado:");
		jlEstado.setBounds(250, 120, 150, 25);
		painelFormulario.add(jlEstado);

		jcEstado = new JComboBox<String>();
		jcEstado.setBounds(300, 120, 160, 25);
		jcEstado.addItem("Selecione");
		jcEstado.addItem("Acre (AC)");
		jcEstado.addItem("Alagoas (AL)");
		jcEstado.addItem("Amapá (AP)");
		jcEstado.addItem("Amazonas (AM)");
		jcEstado.addItem("Bahia (BA)");
		jcEstado.addItem("Ceará (CE)");
		jcEstado.addItem("Distrito Federal (DF)");
		jcEstado.addItem("Espírito Santo (ES)");
		jcEstado.addItem("Goiás (GO)");
		jcEstado.addItem("Maranhão (MA)");
		jcEstado.addItem("Mato Grosso (MT)");
		jcEstado.addItem("Mato Grosso do Sul (MS)");
		jcEstado.addItem("Minas Gerais (MG)");
		jcEstado.addItem("Pará (PA)");
		jcEstado.addItem("Paraíba (PB)");
		jcEstado.addItem("Paraná (PR)");
		jcEstado.addItem("Piauí (PI)");
		jcEstado.addItem("Rio de Janeiro (RJ)");
		jcEstado.addItem("Rio Grande do Norte (RN)");
		jcEstado.addItem("Rio Grande do Sul (RS)");
		jcEstado.addItem("Rondônia (RO)");
		jcEstado.addItem("Roraima (RR)");
		jcEstado.addItem("Santa Catarina (SC)");
		jcEstado.addItem("São Paulo (SP)");
		jcEstado.addItem("Sergipe (SE)");
		jcEstado.addItem("Tocantins (TO)");
		painelFormulario.add(jcEstado);

		jlTelefone = new JLabel("Fone:");
		jlTelefone.setBounds(470, 120, 80, 25);
		painelFormulario.add(jlTelefone);

		jftTelefone = new JFormattedTextField(new MaskFormatter("(##) ####-####"));
		jftTelefone.setBounds(510, 120, 105, 25);
		painelFormulario.add(jftTelefone);

		jlCelular = new JLabel("Celular:");
		jlCelular.setBounds(625, 120, 110, 25);
		painelFormulario.add(jlCelular);

		jftCelular = new JFormattedTextField(new MaskFormatter("(##) #####-####"));
		jftCelular.setBounds(680, 120, 126, 25);
		painelFormulario.add(jftCelular);

	}
}

O que eu quero é, quando o usuario for acessar o formulario cadastro de cliente, ao abrir a tela, todos os campos estejam desabilitados, impossibilitando o usuario de fazer qualquer lançamento de dado…

Esse lançamento de dados só será permitido quando o usuario clicar no botão Novo, tornando todos os campos (menos o ID) editaveis…

Como faço isso neste caso?