Como refatorar esta classe!

2 respostas
M

Olá… boa noite !.. por favor, em um projeto, tenho uma tela de cadastro, onde os eventos dos botoes, eu trato em uma classe separada, por ex:
em uma classe que chamo CustomerActionListener , nela eu “escuto” os eventos dos botoes e chamo o método de acordo com o botao, por exemplo, botao
cadastrar , na minha classe CustomerActionListener, ouço o actionCommand do botao cadastrar da seguinte forma:

Object source = evt.getSource();
		if (evt.getSource() instanceof JButton) {
			command = ((JButton) evt.getSource()).getName();
		} else if (evt.getSource() instanceof JMenuItem) {
			command = ((JMenuItem) evt.getSource()).getName();
		}

if (command.equals("mnui_consultar_alimentos")) {
			service.getTelaConsulta(form);
		}

if (command.equals("bt_cadastroSair")) {
			telacadastro.setVisible(false);
		}

...e assim vai...........

ele chama o método que esta em uma classe service :

public final void getTelaConsulta(CustomerForm form) {

		if (telaconsulta == null) {

			telaconsulta = new CustomerTelaConsulta();
			form.getDesktopPane().add(telaconsulta);
			telaconsulta.setVisible(true);
			telaconsulta.SetFont();

		} else if (telaconsulta != null) {

			telaconsulta = new CustomerTelaConsulta();
			form.getDesktopPane().add(telaconsulta);
			telaconsulta.getTf_id().grabFocus();
		}
	}

e assim por diante, acontece que neste tela, tenho botoes para gravar, procurar, sair, consultar registros, que abre outra tela
com o botoes avancar, voltar etc. ficou “porco” meu codigo com tantos if’s para cada botao. e não sei como melhorar esta
classe CustomerActionListener, olhem um trecho abaixo.

if (command.equals("bt_consultaSair")) {

			telaconsulta.setVisible(false);
		}

		if (command.equals("bt_primeiro")) {

			registroAtual = 0;
			getValores(registroAtual);
		}

		if (command.equals("bt_seguinte")) {

			if (registroAtual != customerList.size() - 1)

				getValores(++registroAtual);
		}

		if (command.equals("bt_anterior")) {

			if (registroAtual != 0)
				getValores(--registroAtual);
		}

		if (command.equals("bt_ultimo")) {
			registroAtual = customerList.size() - 1;
			getValores(registroAtual);

		}

gostaria de ouvir a opniao de voces para melhorar este codigo…

li estes artigos aqui no forum… mas nao deu para entender onde aplicar no meu caso…


Obrigado a todos.

2 Respostas

charles.eduardo

A ideia, não posso afirmar que é a 100% ideal ou totalmente melhor...

na GUI que estão os botões poderia criar um metodo para receber o ouvinte...

...
public void botãoGravarAddActionListener(ActionListener ouvinte) {
            bGravar.addActionListener(ouvinte);
        }
...
na sua CustomerActionListener...
public class CustomerActionListener {

    private GUIxxx guiXXX;

    public CustomerActionListener(GUIxxx gui) {
        this.guiXXX = gui;
        guiXXX.botãoGravarAddActionListener(new OuvinteDoBotaoGravar());
    }
//Classe interna que ira tratar
class OuvinteDoBotaoGravar implements ActionListener {
        public void actionPerformed(ActionEvent e) {
      //Aqui trata o evento
       }
}

Espero que isso possa ajudar-lhe!

M

ola… obrigado pela ajuda… da para dar uma pensada melhor na sua sugestão… pode ser que
seja uma boa sim!!! obrigado…

Criado 30 de março de 2012
Ultima resposta 31 de mar. de 2012
Respostas 2
Participantes 2