[RESOLVIDO]Como fazer um método aguardar um retorno

0 respostas
thiagopsnfg

Boa noite. Estou começando a programar em java. estou com o seguinte problema, fiz um editor de texto e tenho um botão para escolher a fonte. para escolher a fonte fiz uma classe JFontchooser que é um JFrame. quando se clica no botão é instanciado um objeto JFontchooser que faz a GUI da escolha da fonte ficar visível. na GUI o usuário escolhe a fonte e pressiona OK ou cancela. a fonte fica salva em uma variável static, depois na sequência do código principal, utilizando o método doobjeto JFontchooser public Font getFont() é recuperado a fonte escolhida pelo usuário, pelo menos era isso que eu esperava. O problemas é que na sequência, não consigo fazer o programa esperar a escolha do usuário na GUI de Fonte que logo executa a linha que retorna a fonte como NULL.

Um exemplo do que estou falando. A classe principal ficaria assim. ‘’’ public class Texto extends JFrame{

JTextPane texto;

public Texto(){

getContentPane().setLayout(new BorderLayout());
JButton botao = new JButton("botão");
botao.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        Teste t = new Teste();

    //Aqui a GUI fica visível, mas não consigo fazer a execução esperar a escolha do usuário
    //"nste caso o apertar do botão".
    //Ele simplismente torna a GUI visível e retorna a string NULL.
        String s = t.showDialog();

        System.out.println("A string retornada foi: " + s);
    }
});

texto = new JTextPane();

add(BorderLayout.CENTER,texto);
add(BorderLayout.NORTH,botao);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);
setVisible(true);

}

public static void main(String[] args) {

new Texto();

}

} a outra ficaria assim.

public class Teste extends JFrame {

private static String texto = null;

public Teste(){
getContentPane().setLayout(new BorderLayout());

JButton botao = new JButton("botão");
botao.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {

        texto = "teste";

    }
});

add(BorderLayout.CENTER,botao);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);

}

public String showDialog(){

setVisible(true);

return texto;

}
}

estas classes são exemplos simplificados ,mas o dilema é o mesmo.

Criado 25 de julho de 2013
Respostas 0
Participantes 1