2016-11-10 3 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() Mathod, как это.

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