o construtor só executa a linha "super(frame.modal)"
ao fechar a tela de CadChuvas as linhas logo a baixo é executadas.
Mais preciso que seja executado todo o método construtor para iniciar toda a tela.
Como fazer isso?
Tire o setVisible(true) de dentro do construtor da classe pai.
Dica: Nunca coloque o comando setVisible(true) dentro de um construtor.
altitdb
ViniGodoy,
porque você diz para nunca colocar dentro de um construtor??
Eu faço da seguinte maneira:
public CadChuva(JDialog frame, boolean modal){
super(frame,modal);
}
public CadChuva() {
initComponents();
setModal(true);
setVisible(true);
}
E quando eu chamo o Dialog faço assim:
CadChuva c = new CadChuva();
Tive problemas quando comecei a fazer isso, pois colocava o setVisible antes dos outros metodos que era influenciados na construção, mas depois descobri que basta por ele por ultimo que não tem problema!
xD~~
ViniGodoy
O ideal é fazer assim:
public CadChuva(JDialog frame, boolean modal){
super(frame,modal);
}
public CadChuva() {
initComponents();
setModal(true);
}
E chamar o dialog assim:
CadChuva c = new CadChuva();
c.setVisible(true);
Por vários motivos:
1. Evita o problema que o autor desse tópico teve. Lembre-se que o método setVisible em dialogs modais trava até que a dialog seja fechada, o que faz que sua dialog seja exibida antes de ser completamente construída!;
2. Permite que quem cria a Dialog escolha se quer abri-la ou não.
3. Permite que você chame outros métodos da Dialog, antes de abri-la:
CadChuva c = new CadChuva();
c.addItemCadastro(i1);
c.addItemCadastro(i2);
c.setVisible(true);
Por essas e outras, não é uma boa prática chamar setVisible no construtor.
altitdb
ViniGodoy,
por exemplo, tenho um Dialog, e nele tenho um metodo limparCampos();
Eu teria que fazer assim:
CadChuva c = new CadChuva();
c.limparCampos();
c.setVisible(true);
Eu não poderia fazer assim:
CadChuva(){
limparCampos();
}
Sabendo que esse metodo é sempre obrigado a executar quando eu instancio um novo Dialog.
Dessa forma eu poderia evitar que alguem que criasse uma instancia desse Dialog esqueça de chamar o limparCampos();
xD~~
ViniGodoy
Pode sim. O importante é o setVisible() não estar no construtor. Senão vc exibirá o dialog antes dele estar completamente construído.
Sem falar que uma chamada ao super num dialog filho irá gerar o problema que o colega do tópico teve.
T
Two_
Como sempre Vini sanando todas minhas duvidas!
realmente desconhecia que o o setVisible(true) travava o jDialog.
Muito obrigado @ViniGodoy por responder meus tópicos com rapidez e eficiência
T
Two_
ViniGodoy,
tem como ativar no JDialog o minimizar e maximizar?
Eu realmente não recomendo burlar tanto o comportamento do Swing, pois você tem poucas garantias de código multiplataforma. Infelizmente, ele vem com algumas limitações e essa é uma delas. Se você tem JFrame, você tem os botões, mas não tem nada modal. Se você usa o JDialog, ele é modal, mas não tem maximizar e minimizar.