Tamanho da String

7 respostas
P

OI gente!!!
Estou com um simples probleminha!!!

Eu estou usando a classe FontMetrics para pegar a altura e a largura da minha String de acordo com o tamanho e a fonte. eu consigo pegar a altura, mas na hora de pegar a largura está dando um erro no método dessa classe. Eu ja tentei usar os métodos stringWidth(String str) e o metodo charsWidth(char []ch, int off, int len), mas está dando erro e eu não estou conseguindo entender. Alguém poderia me ajudar???
Estou mandando um pedaço do meu código…

/**********************  Classe SetFont  *********************/	
	private class SetFont extends FontMetrics
	{
		int height, width;
		
		SetFont(Font font)
		{
			super(font);
		}
		
		public int getHeight()
		{
			height = super.getHeight();
			return height;
		}
		
		public int charsWidth(char[] str, int off, int len)
		{
			width = super.charsWidth(str, off, len);
			return width;
		}
                                
                                public int stringWidth(String str)
                                {
                                                width = super.stringWidth(str);
                                                return width;
                                }
	}

/****************  Fim da Classe SetFont  *****************/	
	
/*************  Método que escreve a String  **************/

private void writeString(String string,int x, int y, int graus, Graphics2D g2)
{
          Font font = new Font("Arial", Font.ITALIC, 5);
          SetFont fm = new SetFont(font);
          g2.setFont(font);
          g2.rotate(Math.toRadians(grau),x,y);
          g2.drawString(string, x, y);
          System.out.println("Altura do texto: "+fm.getHeight());
          System.out.println("Largura do texto: " + fm.charsWidth(string.toCharArray(), 0, (string.length()-1)));
}

7 Respostas

dukejeffrie

Paty, manda o erro pa nóis!! 8)

[]s

P
at java.awt.FontMetrics.stringWidth(FontMetrics.java:303)

at java.awt.FontMetrics.charsWidth(FontMetrics.java:326)

at PolygonEditor$SetFont.charsWidth(PolygonEditor.java:160)

160 é a linha que está dando erro no meu código.
É quando chama o métdo charsWidth() da classe SetFont, que foi criada.

Rafael_Steil

Patricia, o erro que vc mandou nao ajuda, pois o “erro real” esta um pouco antes. Geralmente eh primeira parte ( algo como java.lang.NullPointeException e entao o lugar no teu codigo onde causou o erro).

Rafael

P

Desculpe, foi mal!!!

O erro que está dando é: java.lang.StackOverflowError

Mas eu não consigo entender porque está dando overflow de pilha???!!!
as linhas da minha classe que deram erro foram:

Classe java.awt.FontMetrics

métodos: public int stringWidth(String str)
e public int charsWidth(char[] data, int off, int len)

"Dá uma olhadinha no código, ficou meio bagunçado do jeito que coloquei, mas acho que dá pra entender…)

dukejeffrie

Eu abri o javadoc da classe FontMetrics e lá tá escrito assim:

Portanto, minha cara, o que vc tem é um loop infinito!!! Vc tem que implementar no braço alguns métodos, pelo que eu entendi. por exemplo, no de string, vc chama seu próprio charWidth(char[], int, int) com a linha

return charWidth(str.toCharArray(), 0, str.length);

Aliás, pra que vc tá implementando um FontMetrics??

Paulo_Silveira

“dukejeffrie”:

Portanto, minha cara, o que vc tem é um loop infinito!!!
Aliás, pra que vc tá implementando um FontMetrics??

E de dentro do loop, voce chama o proprio metodo do loop. Cada chamada nova pro mesmo metodo eh uma recursao, entao empilha mais um stack frame. Quando isso bate 220kbytes, BUM.

dukejeffrie

Paulo, vc está gastando preciosos bytes do seu cérebro com informações do gênero “quantos kbytes tem o stack frame da JVM da Sun”. :lol:

Acho que vc devia, sei lá, andar de bicicleta. Pra variar!!

[]s!!

Criado 20 de fevereiro de 2003
Ultima resposta 21 de fev. de 2003
Respostas 7
Participantes 4