[quote=Bruno M Gasparotto]Qual a dúvida quanto ao exemplo do Vini?
Acredito que a idéia que ele quis passar, é que independente do JDialog ser um componente gráfico, ele é um objeto como qualquer outro que pode retornar valor em uma chamada de método. Para isso funcionar, basta ele ser modal, pois a execução do código do seu frame principal não continua enquanto ele estiver aberto, ou seja:
1 - Instancie novo jdialog no seu frame principal como modal, nesse jdialog, obtenha o endereço e armazene em um atributo.
2 - Feche o dialog (talvez em um botão de Ok) e a execução do código do frame irá continuar.
3 - Chame um método que você criou no dialog, que retorna o valor armazenado anteriormente.[/quote]
Basicamente eu entendi sim o exemplo do vini, mas aqui não esta funcionando…
vou postar meu código
Aqui esta minha classe JDialog inteira
public class TrocarBobina extends JDialog {
private static final long serialVersionUID = 1L;
private JLabel lbInfoBobina;
private JTextField txtInfoBobina;
private JButton btnSalvar, btnCancelar;
protected boolean okSelecionado;
private Color corLetra = Color.black;
private Font fonteLbs = new Font("Calibri", Font.CENTER_BASELINE, 14);
@SuppressWarnings("static-access")
public TrocarBobina(){
setTitle("Trocar bobina");
Container tela = getContentPane();
setLayout(null);
lbInfoBobina = new JLabel("Informe a qtd:");
lbInfoBobina.setBounds(95, 10, 100, 15);
lbInfoBobina.setFont(fonteLbs);
lbInfoBobina.setForeground(corLetra);
txtInfoBobina = new JTextField();
txtInfoBobina.setBounds(85, 30, 120, 30);
txtInfoBobina.setFont(new Font("Calibri", Font.CENTER_BASELINE, 20));
txtInfoBobina.setHorizontalAlignment(txtInfoBobina.CENTER);
tela.add(lbInfoBobina);
tela.add(txtInfoBobina);
btnSalvar = new JButton("Salvar");
btnCancelar = new JButton("Cancelar");
btnSalvar.setBounds(50, 70, 80, 30);
btnCancelar.setBounds(140, 70, 95, 30);
tela.add(btnSalvar);
tela.add(btnCancelar);
tela.setBackground(Color.LIGHT_GRAY);
setSize(300, 150);
setVisible(true);
setLocationRelativeTo(null);
btnSalvar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Integer.parseInt(txtInfoBobina.getText());
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(TrocarBobina.this, "O valor deve ser um numero!");
}
okSelecionado = true;
setVisible(false);
}
});
btnCancelar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
public boolean alterarValor(){
okSelecionado = false;
setModal(true);
setVisible(true);
return okSelecionado;
}
public String getValor(){
return txtInfoBobina.getText();
}
}
E aqui o meu JFrame
public class ControleFrame extends JFrame implements Runnable {
//aqui vao os atributos
//constructor
public ControleFrame() {
super("Sistema supervisório rotuladora automática - Tela principal");
Container tela = getContentPane();
setLayout(null);
//aqui vao os componentes de tela, não vo postar se não fica muito grande
//Esse é o meu botao pra abrir o JDialog
btnBobina.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onAlterarValor();
}
});
//Metodo onAlterarValor()
protected void onAlterarValor(){
TrocarBobina tbDialog = new TrocarBobina();
if(tbDialog.alterarValor()){
txtBobina.setText(tbDialog.getValor());
}
tbDialog.dispose();
}
Se eu deixo assim, o JDialog nem abre por causa do tbDialog.dispose(), mas msm assim se eu comento ou tiro de qualquer jeito não acontece nada.
Ao meu ver eu segui as instruções do exemplo do vini, mas não consigo achar os meus meu erros ai…