2009-04-16 6 views
2

Graphics 객체를 사용하여 사용자 정의 페인팅을 시도하고 있습니다. 텍스트를 단어 감싸기 스타일로 그리기 위해이 페이지의 어딘가에서 찾은 예제 코드를 사용했습니다.Java Graphics에서 글꼴을 변경할 수 없습니다.

제 문제는 어떤 식 으로든 글꼴 크기를 변경할 수 없다는 것입니다. 제발 도와주세요, 아래에 실행 가능한 소스 코드를 첨부했습니다.

감사

크리스

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.font.LineBreakMeasurer; 
import java.awt.font.TextLayout; 
import java.text.AttributedCharacterIterator; 
import java.text.AttributedString; 

import javax.swing.JFrame; 

public class JavaFontProblem extends JFrame { 

    public JavaFontProblem() { 
     setSize(new Dimension(1024, 768)); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     String longtext = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."; 

     g2d.setColor(Color.BLACK); 
     g2d.setFont(new Font("Verdana", Font.PLAIN, 250)); 

     AttributedString atString = new AttributedString(longtext); 
     AttributedCharacterIterator iterator = atString.getIterator(); 

     LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, g2d 
       .getFontRenderContext()); 
     measurer.setPosition(iterator.getBeginIndex()); 

     int m_width = 500; 

     float x = 50, y = 50; 
     while (measurer.getPosition() < iterator.getEndIndex()) { 
      TextLayout layout = measurer.nextLayout(m_width); 

      y += layout.getAscent(); 
      float dx = layout.isLeftToRight() ? 0 : m_width 
        - layout.getAdvance(); 

      layout.draw(g2d, x + dx, y); 
      y += layout.getDescent() + layout.getLeading(); 
     } 

    } 

    public static void main(String[] args) { 
     new JavaFontProblem().setVisible(true); 
    } 

} 

답변

3
당신은 LONGTEXT의 길이를 보낼 필요가
atString.addAttribute(TextAttribute.FONT, myFont, 0, atString.length()); 
1

...도하지 atString 길이, 당신은 당신의 자신의 폰트를 선언해야합니다 목적. 또한 setFont를 가질 필요가 없습니다.

import java.awt.font.TextAttribute; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.font.LineBreakMeasurer; 
import java.awt.font.TextLayout; 
import java.text.AttributedCharacterIterator; 
import java.text.AttributedString; 

import javax.swing.JFrame; 

public class JavaFontProblem extends JFrame { 

    public JavaFontProblem() { 
     setSize(new Dimension(1024, 768)); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     String longtext = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."; 

     g2d.setColor(Color.BLACK); 
     //g2d.setFont(new Font("Verdana", Font.PLAIN, 250)); 

     Font myFont = new Font("Verdana", Font.PLAIN, 250); 

     AttributedString atString = new AttributedString(longtext); 
     atString.addAttribute(TextAttribute.FONT, myFont, 0, longtext.length()); 


     AttributedCharacterIterator iterator = atString.getIterator(); 

     LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, g2d 
         .getFontRenderContext()); 
     measurer.setPosition(iterator.getBeginIndex()); 

     int m_width = 500; 

     float x = 50, y = 50; 
     while (measurer.getPosition() < iterator.getEndIndex()) { 
       TextLayout layout = measurer.nextLayout(m_width); 

       y += layout.getAscent(); 
       float dx = layout.isLeftToRight() ? 0 : m_width 
           - layout.getAdvance(); 

       layout.draw(g2d, x + dx, y); 
       y += layout.getDescent() + layout.getLeading(); 
     } 

    } 

    public static void main(String[] args) { 
     new JavaFontProblem().setVisible(true); 
    } 

}