2016-11-10 51 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