Modal em java - o que é isso?

Modal em java - o que é isso ?
Eu tive uma aula sobre isso, mas até agora nao entendi pra que serve. ja perguntei pra meus amigos, pesquisei. Re-li o pdf da aula, mas ainda nao entendi.

Pra mim não faz sentido.

Modal é uma janela que bloqueia o acesso as demais janelas, enquanto ela não é clicada.

Os programas são cheios de janelas modais.

Por exemplo, você pode ter uma tela que exibe os dados de um cadastro com um botão editar. Quando o usuário pressionar esse botão, você abre outra janela, modal, que permite que o usuário altere os dados do cadastro.
Assim, o usuário não poderá clicar na tela de visualização, enquanto não decidir se altera aquele cadastro ou não, e fechar a janela.

Uma das vantages de janelas modais, no Swing, é que o método setVisible dela só retorna quando a janela é fechada. Assim ficar fácil de comunicar dados com a janela modal, como exibido nesse exemplo:

No java, somente JDialogs podem ser modais. Não é possível deixar um JFrame nem um JInternalPane assim.

1 curtida

sabe quando voce poe um JOptionPane.showInputDialog(“Digite um numero”)… voce ja reparou que aquilo que esta abaixo desse trecho de código não será executado até que voce feche esse JOptionPane, clicando em ok, cancelar ou no X?
Então, isso é que é modal. A idéia principal de uma tela ser modal é que voce possa inserir uma entrada nessa tela, e a tela devolve algum objeto pro código que chamou essa tela.

Então isso de modal é automático? Tipo, eu nao preciso colocar Modal.setOn(true) haha , é só uma característica?

Viny, estou vendo seu programa agora.
valeu

Então, deixa eu ver se eu entendi.

Ele abre uma janela com os dados em branco.Quando voce clica em alterar, ele abre um JPanel e quando vc coloca os dados e clica em ok, ele da settext nos campos do primeiro Panel ?

Não é automatico, voce precisa dizer quando o JDialog será modal ou não.
Existe um método da classe JDialog chamado setModal(boolean modal) aonde voce especifica se a janela será modal ou não.

Vou dar um exemplo de uso de um JDialog modal:
Vamos supor que tenho uma tela de Venda, nessa tela eu devo selecionar o cliente que eu quero fazer a venda.
Então eu boto um JTextField que irá guardar o código, e do lado dele um JButton, que ao clicar nesse JButton ele irá criar uma tela de cadastro/alteração/pesquisa de clientes, essa tela será modal. Aí nessa tela que abriu a partir do botão voce vai ter lá a sua tabela de clientes, aí você clica em cima de um cliente na sua tabela e fecha a janela. assim que voce fizer isso a execução volta pra aquela janela de venda, a partir do momento em que voce executou o setVisible(true) do JDialog de clientes. Então depois da chamada do setVisible, voce faz um comando pra pegar o cliente selecionado naquela tela de clientes.
Entendeu? Qualquer coisa só pedir…

Hmm, Entendi + -, assisti umas video-aulas no youtube e peguei coisa aqui no forum e no google.

Eu queria fazer o meu próprio aplicativo. Um bem simples… Qual o procedimento ?

Por exemplo >

  • Faça um jFrame
    -Coloque um botão
  • set Modal

Pronto está Modal ?

Quero fazer o mais simples possível. Nem precisa de layout.
Só quero entender o conceito ? Vcs podem me ajudar de novo ? estou com muita dificuldade nisso kkk até javaFX é mais fácil !

voce vai ter 2 janelas, o seu JFrame principal que é aonde voce vai ter os menus(cadastro de clientes, cadastro de cidades, etc…) e os seus JDialogs secundarios(cada uma das telas de cadastro que vao ser abertas pelos menus do JFrame principal.
No construtor de cada JDialog, bote pra receber 2 parametros(Window parent,boolean modal).
O código do construtor vai ficar assim:

public CadastroClientes(Window parent,boolean modal)[
   super(parent);//chama o construtor da classe JDialog passando o componente pai
   setModal(modal);//seta como modal verdadeiro ou falso, dependendo de como está sendo instanciado o JDialog
}

Ai nos seus menus principais, voce provavelmente nao quer que eles sejam modais, então voce chama assim, por ex:

CadastroClientes tela=new CadastroClientes(this,false);
tela.setVisible(true);

Isso quando voce está chamando a partir da tela principal. Agora, quando voce precisar usar a funcionalidade modal, use assim:

CadastroClientes tela=new CadastroClientes(this,true);
tela.setVisible(true);

//parte em que vai pegar o Cliente selecionado na tela de clientes
//suponho que voce tenha 2 campos na sua tela de venda, o campo código do cliente e o campo nome do cliente
//e que na tela de clientes voce tenha uma List que armazea os clientes que são mostrados na tabela
Cliente c=tela.listDeClientes.get(tela.tabelaDeClientes.getSelectedRow());
campoCodigoDoCliente.setText(c.getId());
campoNomeDoCliente.setText(c.getNome());

O ideal seria voce ter um componente que armazene o objeto inteiro dentro do campo, ao invés de usar 1 campo pro id e outro pro nome, mas isso não vem ao caso.