Oi turma.
Gostaria de saber como eu faço pra colocar uma String numa diagonal da tela.
Por exemplo: tenho um mapa de um bairro, e quero que o nome da rua apareça seguindo +/- o caminho da rua, como no mapa da lista telefônica… (não sei se a sua lista é assim).
Então como eu poderia fazer isso?
Ficaria agradecida se alguém pudesse me dar essa luz! :lol:
String em diferentes ângulos
4 Respostas
ola patricia
que imagem charmosa
entao, creio que voce va precisar pegar a posicao onde quer colocar no comeco, e plotar char por char. uma solucao pronta no java.* creio que nao exista
Oi Patricia,
fazer rotacao de componentes eh um pouco complicado ( no minimo meio chato ). Eu sou meio enrolado com Swing, mas consegui fazer um exemplo meia-boca que rotaciona um JLabel. Eh necessario que voce crie sua propria classe, que extenda JLabel ( ou qualquer outro componente que voce queira rotacionar ).
Veja:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
class MyLabel extends JLabel
{
private AffineTransform af;
public MyLabel(String s, int degrees)
{
setText(s);
af = new AffineTransform();
af.rotate(Math.toRadians(degrees));
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.setTransform(af);
g2.drawString(getText(), getX() + 10, getY() + 10);
super.paintComponent(g2);
repaint();
}
}
public class JLabelRotate extends JFrame
{
public JLabelRotate()
{
MyLabel label = new MyLabel("Minha linda String", 45);
getContentPane().add(label);
setSize(200, 300);
setVisible(true);
}
public static void main(String args[])
{
new JLabelRotate();
}
}
Acho que com isso vc ja consegue ter uma boa base.
Rafael
Caro Rafael:
Muito Obrigada pela dica. Com certeza esse código vai ajudar e muito para resolver o meu problema.
Valeu mesmo.
Patricia
Vc pode usar uma técnica de escrever a string em outra imagem, e na hora h só desenhar a imagem inclinada que vc já guardou:
public class RotatedLabel extends JComponent {
private Image image;
private JLabel label;
private double theta;
public void setText(String text) {
label.setText();
textChanged();
}
public void textChanged() {
Image i = new Image();
Graphics2D g = (Graphics2D) i.getGraphics();
label.paintComponent(g);
g.rotate(tetha);
this.image = i;
repaint();
}
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, this);
}
Rafael, vc criou um loop infinito no seu código:
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.setTransform(af);
g2.drawString(getText(), getX() + 10, getY() + 10);
super.paintComponent(g2);
repaint();
}
o repaint() chama o paint(Graphics) que chama o paintComponent(Graphics) que chama o repaint() que chama… :roll:
Além disso, é um perigo vc mexer na AffineTransform de um Graphics que vc não tem controle. Por exemplo, na imagem acima, eu sei que o Graphics é uma região isolada. Se vc seta o graphics do componente direto, todos os outros componentes desenhados a partir dali vão usar a sua transformação, além de talvez vc perder outras transformações anteriores (como scaling, por exemplo).
Boa sorte, patricia!! Se vc se empolgar, olha o tutorial de Java3d que é louquíssimo…
[]s