Qual é a dessa fonte?

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 :wink:

Estranho, não deu nenhum erro?

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); }); } }

Recomendo fortemente que você leia esse post: http://www.guj.com.br/java/104644-novo-em-swing#565211

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 :wink: