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.
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.[/quote]
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.
[quote]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. [/quote]
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…