Estou fazendo um método que extende JPanel e desenha coisas dentro dele usando o método Paint(Graphics g);
Quero saber como eu faço pra desenhar uma String centralizada no ponto de minha escolha usando o método g.drawString ou similar.
Desde já agradeço.
Ps: O método g.drawString(String, int, int) começa a desenhar no ponto que eu escolhi. O que eu quero é uma maneira dele desenhar com o centro da String nesse ponto. Se tiver outro método pra isso pode ser também.
Um amigo meu acabou de me dar a solução. Vou postar aqui pra vocês:
Tem uma classe chamada FontMetrics que tem o método stringWidth que retorna a largura do texto em pixels. Daí fica:
public void paint(Graphics g) {
String frase = “frase”; //qualquer frase
int posX = 100, posY = 100; //qualquer posicao
FontMetrics fm = g.getFontMetrics();
g.drawString(frase, posX - fm.getWidth(frase), posY - fm.getHeight(frase)); //isso fará a frase aparecer centralizada no ponto (100,100)
}
Agora vou fazer uma outra pergunta. Alguém sabe como eu faço pra aparecer um contorno preto em volta das letras dessa frase? Igual tem em legenda de filme. Seria uma mão na roda.
[quote=Augusto_]Um amigo meu acabou de me dar a solução. Vou postar aqui pra vocês:
Tem uma classe chamada FontMetrics que tem o método stringWidth que retorna a largura do texto em pixels. Daí fica:
public void paint(Graphics g) {
String frase = “frase”; //qualquer frase
int posX = 100, posY = 100; //qualquer posicao
FontMetrics fm = g.getFontMetrics();
g.drawString(frase, posX - fm.getWidth(frase)/2, posY - fm.getHeight(frase)/2); //isso fará a frase aparecer centralizada no ponto (100,100)
}
Agora vou fazer uma outra pergunta. Alguém sabe como eu faço pra aparecer um contorno preto em volta das letras dessa frase? Igual tem em legenda de filme. Seria uma mão na roda.
Basta usar o método fillRect da classe Graphics, passando a posição em que você quer desenhar. Lembre-se de primeiro desenhar o retângulo e depois a String. Se precisar mudar a cor use o método setColor de Graphcis.
eh… eu pensei nisso… mas eu qria uma solução mais bonita mesmo, por que o quadro preto embaixo não fica tão bom. Eu queria fazer um contorno em volta do texto mesmo.
Só um contorno? Ainda tem o método drawRect que só desenha (sem preencher) um retângulo. Com um pouco de pesquisa poderia-se fazer um retângulo com bordas arredondadas e tal, para deixar mais bonito.
Acho que a classe RoundRectangle2D.Double vai ajudar. Faz o que eu disse (retângulo com cantos arredondados). Para desenhá-lo use os métodos draw e fill da classe Graphics2D.
Pois eh… e ia ser uma mao na roda ter isso, por isso postei aqui. Mas realmente está dificil. Um amigo meu falou que pode ser que tenha uma fonte na internet que já tenha esse contorno naturalmente. Mas nao sei, procurei e nao achei.
Realmente. Se você encontar uma fonte com contorno fica mais simples… basta mudar a fonte para essa aí e escrever a String. De qualquer forma, boa sorte na busca!
Bem… se eu fosse obrigado a fazer isso e não tivesse solução eu faria cada letra como uma imagem depois criaria uma classe que desenhava todas as imagens em sequencias como se fossem palavras.
Mas não seria muito trabalho? Tenho quase certeza que uma boa busca na internet resolve (deve haver esse tipo de fonte). Agora, se não houver outras soluções mesmo, pode até ser uma boa idéia, que com um pouco de trabalho pode ser posta em prática.
Esqueci de comentar. A forma do Mark é mesmo muito utilizada em jogos, ou com fontes mais decoradas.
Outra coisa. Se quiser sobrescrever só o método paint do seu JFrame, dispensando assim o JPanel, você precisará do comando getInsets() para centralizar corretamente seu texto. Ele retorna para você o tamanho das bordas do JFrame (barra de título e bordas laterais).
Sem essa informação, seu texto parecerá deslocado para cima, pois estará centralizado de acordo com a janela inteira, e não com a área útil do JFrame.
hahahaha pior que eu nao duvido que alguem ja tenha feito isso… hahahaha
ia ser engraçado ateh… botar as letras num vetor e ir desenhando heuaheuahueauhehuaeuahea
Eu me lembro que fazia coisas como essa quando programava C.
O jeito que o mark falou é legal se vc tiver um conjunto pequeno de fontes, e elas forem muito decoradas. O processamento vetorial de fontes decoradas é muito pesado.
Fora que um artista pode gerar bitmaps de fontes de altíssima qualidade.