2012-03-28 4 views
0

회전 된 텍스트를 표시해야하는 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); 
    } 

} 
+0

시도해보십시오. http://www.subbu.org/javaapps/rotate/RotateTextDemo.html 및 http://www.roseindia.net/tutorials/swt/rotated-text.shtml – PresleyDias

+0

두 번째 튜토리얼을 따르면 다음 이미지를 얻었습니다 :! [RotatedText] (http://i1242.photobucket.com/albums/gg523/zvezdanprotic/RotateText.png). 따라서 이것은 초기 접근 방식보다 훨씬 더 효과적입니다. –

답변

2

이 수는 http://java-sl.com/vertical.html 일 수 있습니까?

+0

실제로는 세로 방향이 있어야하지만 중간 방향은 아닙니다 (예 : 회전 된 텍스트가 원래 텍스트 주위에있는 회전 된 사각형에 맞지 않음). –