2016-11-10 50 views
3

我有一个Java应用程序,我绘制字符串。

enter image description here

现在我想调整每个字符之前和之后他们适合网格(每个字符在他们自己的正方形)的空白。我怎么能做到这一点?谢谢您的回答。字符串中字符之间的填充

public class FontTesting extends Applet { 

private final int gridSize=20; 
public void paint(Graphics g) { 

    Graphics2D g2d = (Graphics2D)g; 
    paintBackground(g2d); 
    String text1 = "atzlipjnmr . . A|"; 
    String text2 = "HHHHHHHHHH . . I|"; 
    String text3 = "WWWWWWWWWW , , 9|"; 
    String text4 = "ATATATATAT  |"; 
    Font font = new Font("monospaced", Font.PLAIN, 20); 

    g2d.setColor(Color.BLACK); 
    g2d.setFont(font); 

    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
      RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
    g2d.drawString(text1, 20, 36); 

    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
         RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
    g2d.drawString(text2.toUpperCase(), 20, 56); 

    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
      RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
    g2d.drawString(text3.toUpperCase(), 20, 76); 

    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
      RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
    g2d.drawString(text4.toUpperCase(), 20, 96); 
} 

public static void main(String[] args) { 

    Frame f = new Frame("Antialiased Text Sample"); 

    f.addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 

    f.add(new FontTesting()); 
    f.setBackground(Color.WHITE); 
    f.setSize(new Dimension(300, 180)); 
    f.setVisible(true); 
} 
private void paintBackground(Graphics2D g2){ 
    g2.setPaint(Color.GRAY); 
    for (int i = 0; i < getSize().width; i += gridSize) { 
     Shape line = new Line2D.Float(i, 0, i, getSize().height); 
     g2.draw(line); 
    } 

    for (int i = 0; i < getSize().height; i += gridSize) { 
     Shape line = new Line2D.Float(0, i, getSize().width, i); 
     g2.draw(line); 
    } 
} 

}

+4

你能告诉我们你的代码吗? –

回答

2

由字符绘制你的文本字符串的字符入电网。看看这个方法。

private void paintText(Graphics2D g2, int row, String text){ 
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
    for(int i = 0; i < text.length(); i++){ 
     g2.drawString(Character.toString(text.charAt(i)), i * gridSize, row * gridSize); 
    } 
} 

您可以在我们的paint()这样的方法中使用它。

paintText(g2d, 1, text1); 
paintText(g2d, 2, text2); 
[...] 
+0

这工作完全谢谢你。但是我遇到了另一个问题。我将绘制一个字符串,我将从.txt文件中获得。问题是如何知道何时必须转到下一行,如果txt文件将有多行? –

+1

如果你从文件中读取所有文本到'String'中,你可以用换行符'\ n'分割它,并写下如下内容:'int i = 1; for(String line:text.split(“\ n”))paintText(g2d,i ++,line);' – ArcticLord