海水正蓝

面朝大海,春暖花开
posts - 145, comments - 29, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

最近在给客户做项目的时候客户提出要求要给图片加水印, 在添加文字水印时,让用户自定义自体,当用户在选择字体时,如果勾选了删除线和下划线选项,而java.awt.Font不支持下划线和删除线的style, 这怎么办呢?

字体设置

还好,Java提供了 AttributedString 类, 通过

attributedString.addAttribute(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);

attributedString.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);

即可给文字添加删除线和下划线,再通过

graphics2D.drawString(as.getIterator(), x, y);

就可以显示下划线和删除线的效果了。

删除线下划线效果

Java代码
  1. import java.awt.Font;  
  2. import java.awt.Graphics;  
  3. import java.awt.Graphics2D;  
  4. import java.awt.RenderingHints;  
  5. import java.awt.font.TextAttribute;  
  6. import java.text.AttributedString;  
  7.   
  8. import javax.swing.JFrame;  
  9. import javax.swing.JPanel;  
  10.   
  11. public class IteratorUnderStrike extends JPanel{  
  12.   public void paint(Graphics g) {  
  13.     Graphics2D g2 = (Graphics2D) g;  
  14.   
  15.     String s = "/"www.java2s.com/" is great.";  
  16.   
  17.     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,  
  18.         RenderingHints.VALUE_ANTIALIAS_ON);  
  19.     Font plainFont = new Font("Times New Roman", Font.PLAIN, 24);  
  20.   
  21.     AttributedString as = new AttributedString(s);  
  22.     as.addAttribute(TextAttribute.FONT, plainFont);  
  23.     as.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON, 1, 15);  
  24.     as.addAttribute(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON, 18, 25);  
  25.   
  26.     g2.drawString(as.getIterator(), 24, 70);  
  27.   }  
  28.   
  29.   public static void main(String[] args) {  
  30.     JFrame f = new JFrame();  
  31.     f.getContentPane().add(new IteratorUnderStrike());  
  32.     f.setSize(850, 250);  
  33.     f.show();  
  34.   }  



http://yanghuidang.iteye.com/blog/1203582

评论

# re: 【转】java AWT 给 Font 添加删除线和下划线(2D绘图)  回复  更多评论   

2016-03-04 13:37 by
辅导辅导

只有注册用户登录后才能发表评论。


网站导航: