Dispose()?

11 respostas
Nilson.Silva

Olá pessoal to fazendo um programa de estoque (iniciando na verdade) em java e a pergunta é tem como eu vetar o acesso a tela principal estando em uma secundaria?
Eu uso o dispose() porém ele fecha a principal e eu queria manter a principal em segundo plano enquato utilizo a secundaria porém não quero que o usuario possa acessar a principal.
Se poderem ajudar agradeço.

11 Respostas

JMARQ

O JDialog pode fazer esse papel da tela secundária, pois quando é chamado a tela que esta em segundo plano fica inacessível, sendo que não achei legal e não utilizei, aguardo também outra opção para sua resposta… até mais.

Fexx

Pelo o que entendi, vc quer deixar sua segunda tela, como modal certo? se for o caso use:

setModal(true).
Fexx

Veja um exemplo:

Classe Principal

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;


import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;



public class Principal1 extends JFrame {

	private static final long serialVersionUID = 1L;
	private JButton jBtChamraDialog;

	public Principal1() {
		initComponents();
	}

	private void initComponents() {
		setLayout(new GroupLayout());
		add(getJBChamarDialog(), new Constraints(new Leading(117, 10, 10), new Leading(124, 10, 10)));
		setSize(841, 480);
	}

	private JButton getJBChamarDialog() {
		if (jBtChamraDialog == null) {
			jBtChamraDialog = new JButton();
			jBtChamraDialog.setText("chamar Dialog");
			jBtChamraDialog.addActionListener(new ActionListener() {
	
				public void actionPerformed(ActionEvent event) {
					jButton0ActionActionPerformed(event);
				}
			});
		}
		return jBtChamraDialog;
	}

	

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				Principal1 frame = new Principal1();
				frame.setDefaultCloseOperation(Principal1.EXIT_ON_CLOSE);
				frame.setTitle("Principal1");
				frame.getContentPane().setPreferredSize(frame.getSize());
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}

	private void jButton0ActionActionPerformed(ActionEvent event) {
		 Segundaria segundaria = new Segundaria();
		 segundaria.setVisible(true);

		
	}

}

Casse Segundaria.

import java.awt.Color;
import java.awt.Dialog;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.Window;

import javax.swing.JDialog;

import org.dyno.visual.swing.layouts.GroupLayout;



public class Segundaria extends JDialog {

	private static final long serialVersionUID = 1L;
	
	public Segundaria() {
		initComponents();
		setModal(true);  //Deixando seu opbjeto como modal.
		setLocationRelativeTo(null);
	}

	public Segundaria(Frame parent) {
		super(parent);
		initComponents();
	}


	private void initComponents() {
		setFont(new Font("Dialog", Font.PLAIN, 12));
		setBackground(Color.white);
		setForeground(Color.black);
		setLayout(new GroupLayout());
		setSize(498, 330);
	}

	

}

Boa Sorte.

viniciusalvess

Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type também

Fexx

viniciusalvess:
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type também

deprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().

viniciusalvess

Fexx:
viniciusalvess:
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type também

deprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().

entre ai: http://books.google.com.br/books?id=4yjiwDMmOZMC&pg=PA283&lpg=PA283&dq=setModal+e+setModalityType&source=bl&ots=9yOH–hk6J&sig=fpcsGTwCSuKiRzubacRFmcZPolY&hl=pt-BR&sa=X&ei=IQU1T7y8A8qBgwfD3rDoBQ&ved=0CFQQ6AEwBQ#v=onepage&q=setModal%20e%20setModalityType&f=false

Tem um exemplo bacana entre os dois métodos . Realmente não tinha certeza que o setModal era deprecated , mas o setModalityType é substituto dele , pelo fato de poder ou não bloquear a aplicação ,enquanto o setModal(); tem o comportamento igual a JOptionPane.

lina

viniciusalvess:
Fexx:
viniciusalvess:
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type também

deprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().

entre ai: http://books.google.com.br/books?id=4yjiwDMmOZMC&pg=PA283&lpg=PA283&dq=setModal+e+setModalityType&source=bl&ots=9yOH–hk6J&sig=fpcsGTwCSuKiRzubacRFmcZPolY&hl=pt-BR&sa=X&ei=IQU1T7y8A8qBgwfD3rDoBQ&ved=0CFQQ6AEwBQ#v=onepage&q=setModal%20e%20setModalityType&f=false

Tem um exemplo bacana entre os dois métodos . Realmente não tinha certeza que o setModal era deprecated , mas o setModalityType é substituto dele , pelo fato de poder ou não bloquear a aplicação ,enquanto o setModal(); tem o comportamento igual a JOptionPane.

Oi,

Conforme a API

[b]Specifies whether this dialog should be modal.
This method is obsolete and is kept for backwards compatibility only. Use setModalityType() instead.

Note: changing modality of the visible dialog may have no effect until it is hidden and then shown again.

Parameters:
modal - specifies whether dialog blocks input to other windows when shown; calling to setModal(true) is equivalent to setModalityType(Dialog.DEFAULT_MODALITY_TYPE), and calling to setModal(false) is equvivalent to setModalityType(Dialog.ModalityType.MODELESS)[/b]

Tchauzin!

viniciusalvess

Eu tinha lido isso algum tempo atráz porém não tinha encontrado para postar , mas é isso !

Fexx

lina:
viniciusalvess:
Fexx:
viniciusalvess:
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type também

deprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().

entre ai: http://books.google.com.br/books?id=4yjiwDMmOZMC&pg=PA283&lpg=PA283&dq=setModal+e+setModalityType&source=bl&ots=9yOH–hk6J&sig=fpcsGTwCSuKiRzubacRFmcZPolY&hl=pt-BR&sa=X&ei=IQU1T7y8A8qBgwfD3rDoBQ&ved=0CFQQ6AEwBQ#v=onepage&q=setModal%20e%20setModalityType&f=false

Tem um exemplo bacana entre os dois métodos . Realmente não tinha certeza que o setModal era deprecated , mas o setModalityType é substituto dele , pelo fato de poder ou não bloquear a aplicação ,enquanto o setModal(); tem o comportamento igual a JOptionPane.

Oi,

Conforme a API

[b]Specifies whether this dialog should be modal.
This method is obsolete and is kept for backwards compatibility only. Use setModalityType() instead.

Note: changing modality of the visible dialog may have no effect until it is hidden and then shown again.

Parameters:
modal - specifies whether dialog blocks input to other windows when shown; calling to setModal(true) is equivalent to setModalityType(Dialog.DEFAULT_MODALITY_TYPE), and calling to setModal(false) is equvivalent to setModalityType(Dialog.ModalityType.MODELESS)[/b]

Tchauzin!

Exatamente isso. Como havia dito em cima, que o método setModal(), chama o setModalityType

public void setModal(boolean modal) {
        this.modal = modal;
        setModalityType(modal ? DEFAULT_MODALITY_TYPE : ModalityType.MODELESS);
    }
Nilson.Silva

[list]JMARQ[/list]
[list]Fexx[/list]
[list]viniciusalvess[/list]
[list]lina[/list]

Muito obrigado pela ajuda.

Fexx vou tentar por essa tua dica, se não conseguir o resultado que espero vlw assim mesmo.
O que eu queria mesmo era ter um resultado igual ao JOpition quando está acionado.
Fuiii.

discorpio

Bom dia a todos.

Você pode configurar o construtor do JDialog desta forma, apenas com um construtor

public class Segundaria extends JDialog {  
  
    private static final long serialVersionUID = 1L;  
 
    public Segundaria(Frame parent, boolean modal) {  
        super(parent, modal);  
        initComponents();
        setLocationRelativeTo(null);    
    }

    ....
    ....
  }

Outra coisa na qual deve ser observada com relação a Frames Modais e que o Modal só funciona quando o click do mouse for efetuado dentro da interface gráfica que é contralada pela aplicação, ou seja, se a sua aplicação não tomar todas as dimensões de resolução da tela do seu monitor, ao clicar fora da aplicação e em qualquer janela do Sistema Operacional, este Modal não funciona, a sua aplicação passa a ficar em segundo plano, haja visto que o controle deste Modal está sendo feito pelo JVM, dentro da camada de abstração e por isso ele não funciona fora da aplicação java desenvolvida.

Um abraço.

Criado 9 de fevereiro de 2012
Ultima resposta 14 de fev. de 2012
Respostas 11
Participantes 6