2009-04-16 11 views
2

Graphicsオブジェクトを使用してカスタムペイントを実行しようとしています。 テキストをワードラップスタイルでペイントしたいので、このページのどこかにあるサンプルコードを使用しました。Java Graphicsはフォントを変更できません

私の問題は、どのような方法でもフォントサイズを変更できないということです。 以下の実行可能なソースコードを添付してください。あなたはatString長も

... LONGTEXTの長さを送信する必要はありません

おかげ

クリス

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
atString.addAttribute(TextAttribute.FONT, myFont, 0, atString.length()); 
1

は、あなた自身のフォントを宣言する必要がありますオブジェクト。また、あなたの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); 
    } 

} 
関連する問題