Bom dia pessoal, estou com uma pergunta sobre JFrame de iniciante.
Tenho 1 Jframe que dentro dele há um botão, ao clicar no botão ele abre outro JFrame, como eu posso bloquear o primeiro Jframe até o usuario fechar o segundo ?
Bom dia pessoal, estou com uma pergunta sobre JFrame de iniciante.
Tenho 1 Jframe que dentro dele há um botão, ao clicar no botão ele abre outro JFrame, como eu posso bloquear o primeiro Jframe até o usuario fechar o segundo ?
No lugar de um JFrame, use um JDialog.
Então, antes de abrir o seu JDialog faça:
dialog.setModal(true);
dialog.setVisible(true);
Não teria um jeito de fazer um JFrame ?
Não.
Se tiver é gambiarra 
Então pessoal criei este metodo aqui para fazer a minha janela:
public JDialog janelaAnotacao(){
Border bordaPreta = BorderFactory.createLineBorder(Color.BLACK);
JDialog janelaAnotacao = new JDialog();
janelaAnotacao.setSize(500, 500);
janelaAnotacao.setResizable(false);
janelaAnotacao.setModal(true);
janelaAnotacao.setLayout(null);
JLabel jlTxtObservacoes = new JLabel("Anotações:");
jlTxtObservacoes.setBounds(10, 10, 100, 20);
jtaCampoObj = new JTextArea();
jtaCampoObj.setLineWrap(true);
jtaCampoObj.setWrapStyleWord(true);
jtaCampoObj.setDocument(new LimitaCaracteres(1000));
jtaCampoObj.setFont(new Font("Serif", Font.ROMAN_BASELINE, 12));
JScrollPane campoObj = new JScrollPane(jtaCampoObj);
campoObj.setBorder(bordaPreta);
campoObj.setBounds(10,40,400, 400);
janelaAnotacao.add(jlTxtObservacoes);
janelaAnotacao.add(campoObj);
janelaAnotacao.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janelaAnotacao.setVisible(true);
return janelaAnotacao;
}
Não sei o que eu fiz de errado no JDialog, ele não esta fechando quando eu clico no fechar :S
Adicione a linha:
janelaAnotacao.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
No lugar da do EXIT_ON_CLOSE
Vini só mais uma duvida!
Eu acabei criando esta classe:
package view;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import controller.LimitaCaracteres;
public class vwAnotacao extends JDialog{
private JTextArea anotacaoTextArea;
private JButton jbOk;
private JButton jbCancelar;
public vwAnotacao(){
setSize(500, 500);
setResizable(false);
setModal(true);
setLayout(null);
setTitle("Anotações");
criaTelaAnotacao();
setLocationRelativeTo(null);
setVisible(true);
}
private void criaTelaAnotacao(){
Border bordaPreta = BorderFactory.createLineBorder(Color.BLACK);
JLabel jlTxtObservacoes = new JLabel("Anotações:");
jlTxtObservacoes.setBounds(10, 10, 100, 20);
anotacaoTextArea = new JTextArea();
anotacaoTextArea.setLineWrap(true);
anotacaoTextArea.setWrapStyleWord(true);
anotacaoTextArea.setDocument(new LimitaCaracteres(1000));
anotacaoTextArea.setFont(new Font("Serif", Font.ROMAN_BASELINE, 12));
JScrollPane campoObj = new JScrollPane(anotacaoTextArea);
campoObj.setBorder(bordaPreta);
campoObj.setBounds(10,40,475, 380);
jbOk = new JButton("OK");
jbOk.setBorder(bordaPreta);
jbOk.setBounds(120, 430, 100, 20);
jbCancelar = new JButton("Cancelar");
jbCancelar.setBorder(bordaPreta);
jbCancelar.setBounds(270, 430, 100, 20);
add(jbOk);
add(jbCancelar);
add(jlTxtObservacoes);
add(campoObj);
}
public void setJbOk(ActionListener al){
jbOk.addActionListener(al);
}
public void setJbCancelar(ActionListener al){
jbCancelar.addActionListener(al);
}
}
Porem quando eu chamo os eventos dela n acontece nada, eu tirei o setModal() é ele que não está deixando os eventos funcionarem, como eu posso concertar isto ?
minha chamada desta classe:
vwAnotacao anotacao = new vwAnotacao();
anotacao.setJbOk(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("OK");
}
});
anotacao.setJbCancelar(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("CANCELAR");
}
});
O que acontece é que, como vc pedir, ao deixar o JDialog visível, o Frame de trás para de processar. Então, as duas linhas depois do new não são executadas, até que você feche o Dialog.
Você tem duas soluções possíveis para o seu problema:
Eu, particularmente, faria as duas coisas.