JDialog e herança

1 resposta Resolvido
java
W

Bom dia, estou revendo um código que fiz, e vi que muitas vezes crio as mesmas funcionalidades em todos os JDialog que crio, para melhorar isso, estou criando um JDialogPadrão, segue codigo:

public class JDialogPadrao extends JDialog {

    public JDialogPadrao(java.awt.Frame parent) {
        super(parent, true);
        super.setIconImage(parent.getIconImage());
        
        inicializarComponentes();
    }

    private void inicializarComponentes() {
        setLocationRelativeTo(null);
        adicionarEsq();
    }

    private void adicionarEsq() {
        KeyStroke esc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(esc, "fecharEsq");
        getRootPane().getActionMap().put("fecharEsq", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                dispose();
            }
        });
    }
}

Basicamente o foco da duvida é adicionar o comando de fechar ao clicar no esq.
Até ai esta tudo perfeito, mas em algumas telas eu possuo threads que verifico antes de fechar para informar ao usuário que o processamento esta em execução.

if (threadX != null && threadX.isAlive()) {
    JOptionPane.showMessageDialog(rootPane, "Aguarde o processamento finalizar para fechar!");
} else {
    dispose();
}

Como eu procederia para estas telas que valido se a thread esta em execução antes de fechar?

1 Resposta

W
Solucao aceita

Acredito que tenha achado a solução ( não sei se esta correto, caso alguem tenha mais conhecimento, sinta-se livre para corrigir ).

Basicamente na classe pai eu criei o metodo “comandoEsq” como publico, e o mesmo eu sobrescrevo na classe filho:

Classe pai:

public class JDialogPadrao extends JDialog {

    public JDialogPadrao(java.awt.Frame parent) {
        super(parent, true);
        super.setIconImage(parent.getIconImage());

        fecharComEsq();
    }

    private void fecharComEsq() {
        KeyStroke esc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(esc, "fecharEsq");
        getRootPane().getActionMap().put("fecharEsq", new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                comandoEsq();
            }
        });
    }

    public void comandoEsq() {
        dispose();
    }
}

Na classe filho ficaria assim para sobrescrever quando necessario:

@Override
public void comandoEsq() {
    if (textFieldCodigoEmpresa.getText().isEmpty()){
        dispose();
    } else {
        JOptionPane.showMessageDialog(null, "Não pode fechar");
    }
}
Criado 7 de maio de 2020
Ultima resposta 7 de mai. de 2020
Respostas 1
Participantes 1