Eu tenho problema com a minha fonte (java.awt). Eu estou fazendo uma calculadora para exemplificar o uso do padrão MVC, a parte lógica funciona perfeitamente porém a parte visual dela me deixou um pouco confuso.
Dentro do construtor dela eu declaro os componentes normalmente, adiciono um actionListener para os botões, etc. Até aí o programa rodava normalmente, depois eu percebi que o display da calculadora devia ser maior, aumentei o tamanho dele só que também precisava aumentar o tamanho da fonte. Aí que o problema começou, quando eu puis a fonte no display a janela demorava pra carregar, muito mais do que o normal, fica uma tela branca de depois de alguns segundo aparece o programa normal. Não sei isso tem a ver com o jeito que eu pus a fonte no display mas acho que não, queria saber se alguém consegue me dar uma solução que não seja não usar a fonte.
Font font = new Font("Arial Black", Font.BOLD, 22);
tfDisplay = new JTextField("0");
tfDisplay.setFont(font);//já tentei fazer tudo aqui também, da na mesma
tfDisplay.setSize(192,40);
tfDisplay.setLocation(20,10);
tfDisplay.setHorizontalAlignment(4);
add(tfDisplay);
Também alguma sugestão de fonte que pareça mais digital se puderem
Uma fonte mais digital seriam as fontes monoespaçadas. Você pode escrever ali “monospaced” ou usar uma fonte conhecida como “consolas” ou “courrier new”. A vantagem da primeira abordagem é que é mais multi-plataforma.
Não ocorre nenhum erro, a tela só fica branca por um tempo e depois volta ao normal. Eu fiz mais alguns testes e achei mais estranho ainda. Eu calculei quanto tempo demora para o construtor ser compilado com e sem a fonte.
Com Fonte: 125~170ms
Sem Fonte: 109~170ms
Como a diferença entre os dois é mínima além de o contrutor demorar relativamente pouco tempo para ser compilado creio que o problema esteja em outro lugar.
Eu descobri o problema! Não sei exatamente o porque isso acontecia e adoraria uma explicação mas aí vai:
Eu percebi que o problema não tinha nada a ver com o construtor e então fui na classe ‘Main.java’ que é aonde eu crio a classe ‘GUI.java’ que apresentava o problema. Ela estava da seguinte maneira:
public class Main {
public static void main(String args[]){
Gui gui = new Gui();
gui.setVisible(true);
Dados dados = new Dados(gui);
new Controle(dados, gui);
}
}
Não sei porque eu pensei isso, mas eu apaguei a linha ‘gui.setVisible(true);’ e pus ela no final do construtor do GUI (‘setVisible(true)’) e parece que isso resolveu o problema. Agora a janela aparece normalmente sem aquela tela branca estranha.
@ViniGodoy Vou experimentar deixar a fonte monoespaçada, valeu pela dica.
Jamais deixe o método setVisible(true) no construtor da janela. Isso fará com que a janela não totalmente construída seja exibida e gera uma série de problemas.
Tente ajustar seu main para:
public class Main {
public static void main(String args[]){
EventQueue.invokeLater(new Runnable() {
public void run() {
Gui gui = new Gui();
Dados dados = new Dados(gui);
new Controle(dados, gui);
gui.setVisible(true);
});
}
}
Valeu, ViniGodoy. Assim o programa também funciona normalmente, esse jeito de estruturar o main eu vi acho que no netbeans. Vou dar mais uma estudada na parte de Swing e também nunca, jamais, em hipótese alguma usarei uma defaultTableModel novamente