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.