amigos estou abrindo 2 Jframe um o principal que tem os menus e o segundo estou abrindo sem problemas só que quando o 2 esta aberto eu consigo tranquilamente voltar para o 1 jframe e trabalhar nele enquanto o 2 continua aberto. amigos como fazer para o usuario não voltar para o 1 frame quando o 2 jframe esta aberto.
Jframe
8 Respostas
Posso sugerir que ao invés de um outro frame use um JDialog e torne-o modal do frame principal. Algo assim:
JDialog dialogModal = new jDialog(framePrincipal, true);
Isso resolve o seu problema perfeitamente.
Link para um exemplo do que o colega falou:
Você pode também simplesmente na 2° janela usar o JDialog e configurar o método setModal(); como true.
Fazendo isso ele perderá a referência quando, por exemplo, você minimizar, der alt + tab etc. Quando você voltar ele não estará mais modal.
Já passei por isso.
Fazendo isso ele perderá a referência quando, por exemplo, você minimizar, der alt + tab etc. Quando você voltar ele não estará mais modal.
Já passei por isso.
Aqui mesmo fazendo o que você disse, quando eu volto continua modal.
Mas se você está dizendo, então em alguma situação que eu ainda não presenciei talvez ocorra isso.
Aqui mesmo fazendo o que você disse, quando eu volto continua modal.
Mas se você está dizendo, então em alguma situação que eu ainda não presenciei talvez ocorra isso.
Acabei de testar novamente. Olha ai:
Frame:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class FramePrincipal extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FramePrincipal frame = new FramePrincipal();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public FramePrincipal() {
JPanel contentPane = new JPanel();
contentPane.setLayout(null);
this.setContentPane(contentPane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(100, 100, 990, 651);
JButton btnNewButton = new JButton("Chama Dialogo");
btnNewButton.setBounds(100,200,103,35);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new Dialogo();
}
});
contentPane.add(btnNewButton);
}
}
Dialogo:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Dialogo extends JDialog {
public Dialogo() {
JPanel contentPanel = new JPanel();
setBounds(100, 100, 450, 300);
setModal(true);
getContentPane().setLayout(new BorderLayout());
contentPanel.setLayout(new FlowLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
setVisible(true);
}
}
Para testar os problemas que não usar a janela owner dá, teste o seguinte:
a) Abra a janela pai;
b) Abra a janela modal;
c) Clique no botão “exibir área de trabalho” do Windows;
d) Agora clique para abrir a aplicação;
Dependo do SO que você tiver, você terá os seguintes comportamentos:
a) A janela pai vai abrir, completamente travada, e você não poderá fazer nada;
b) A janela pai não vai abrir;
c) A JDialog vai abrir sozinha, e o usuário não vai ver que janela aquela JDialog pertence.
d) A janela pai abre, mas permitindo edição.
Indicando a janela pai, ela abre, o JDialog na frente, e o comportamento modal é garantido. Sempre forneça a janela pai ao abrir dialogs modais. Esse parâmetro não está lá à toa.
Valeu Galera Deu Certo Obg Abraço a todos…