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.
Dispose()?
11 Respostas
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.
Pelo o que entendi, vc quer deixar sua segunda tela, como modal certo? se for o caso use:
setModal(true).
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.
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
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().
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type tambémdeprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().
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.
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type tambémdeprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().
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!
Eu tinha lido isso algum tempo atráz porém não tinha encontrado para postar , mas é isso !
Se eu não me engano o método setModal(); é deprecated, use o setModalityType(ModalityType.APLICATION_MODAL);
tem outros tipos no modality type tambémdeprecated? “acho” que nem na jdk 7, inclusive em seu método ele chama o método setModalityType().
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);
}
[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.
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.