회전 된 텍스트를 표시해야하는 Java 프로그램을 만들고 있습니다. 그러나 텍스트를 올바르게 시각화하는 데 문제가 있습니다.Java2D에서 텍스트 회전
내가 만든 작은 테스트 프로그램이 다음 목록에 나와 있습니다. 이 테스트 프로그램은 버튼을 누를 때 텍스트 줄 (및 텍스트 줄 주위의 사각형)을 여러 번 회전해야합니다. 이것은이 프로그램이하는 일이지만 회전 된 텍스트는 대부분의 경우 회전 된 사각형에 맞지 않습니다!
글꼴 등을 회전 시키려고했지만 실패했습니다.
누구든지 제공된 코드를 확인하고이 동작에 대한 설명을 제공 할 수 있습니까?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
public class RotatedTextDrawing implements ActionListener {
private JFrame m_frame;
private JPanel m_graphvisualizationpanel;
private JScrollPane m_javascrollpane;
public void start() {
m_frame = new JFrame();
m_frame.setSize(1200,800);
m_frame.setPreferredSize(new Dimension(1200,800));
m_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m_frame.setLayout(new FlowLayout());
m_graphvisualizationpanel = new JPanel();
m_graphvisualizationpanel.setSize(3000,3000);
m_graphvisualizationpanel.setPreferredSize(new Dimension(3000,3000));
m_graphvisualizationpanel.setBackground(new Color(255, 255, 255));
m_javascrollpane = new JScrollPane(m_graphvisualizationpanel);
m_javascrollpane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
m_javascrollpane.setPreferredSize(new Dimension(1000, 700));
JButton jb = new JButton("GO");
jb.addActionListener(this);
m_frame.add(jb);
m_frame.add(m_javascrollpane);
m_frame.pack();
m_frame.setVisible(true);
}
public static void main(String args[]) {
RotatedTextDrawing rtd = new RotatedTextDrawing();
rtd.start();
}
public void actionPerformed(ActionEvent e) {
Graphics2D g2d = (Graphics2D) m_graphvisualizationpanel.getGraphics();
AffineTransform oldt = g2d.getTransform();
//Font theFont = g2d.getFont();
g2d.setColor(new Color(0,0,0));
int m_x = 150;
int m_y = 150;
double m_alpha = 10;
String mstring = "STRING VERY LONG STRING VERY VERY LONG";
int m_width = g2d.getFontMetrics().stringWidth(mstring);
int m_height = g2d.getFontMetrics().getHeight();
int centerx = m_x + m_width/2;
int centery = m_y - m_height/2;
g2d.drawRect(m_x,m_y-m_height,m_width,m_height);
g2d.drawRect(centerx,centery,m_width/2,m_height/2);
g2d.drawString(mstring, m_x,m_y);
g2d.setColor(new Color(100,100,100));
for (int br=1; br < 8; br++) {
AffineTransform newt = new AffineTransform();
newt.setToRotation(Math.toRadians(br * m_alpha), centerx,centery);
g2d.transform(newt);
//Font theDerivedFont = theFont.deriveFont(newt);
//g2d.setFont(theDerivedFont);
g2d.drawRect((int)m_x,(int)(m_y-m_height),m_width,m_height);
g2d.drawString(mstring, (int)m_x, (int)m_y);
g2d.setTransform(oldt);
}
//g2d.setFont(theFont);
}
}
시도해보십시오. http://www.subbu.org/javaapps/rotate/RotateTextDemo.html 및 http://www.roseindia.net/tutorials/swt/rotated-text.shtml – PresleyDias
두 번째 튜토리얼을 따르면 다음 이미지를 얻었습니다 :! [RotatedText] (http://i1242.photobucket.com/albums/gg523/zvezdanprotic/RotateText.png). 따라서 이것은 초기 접근 방식보다 훨씬 더 효과적입니다. –