Java 字符串中字符之间的填充

Java 字符串中字符之间的填充,java,swing,fonts,Java,Swing,Fonts,我有一个java应用程序,可以在其中绘制字符串。 现在,我想调整适合网格的每个字符前后的空格(每个字符在各自的正方形中)。我怎样才能做到这一点?谢谢你的回答 public class FontTesting extends Applet { private final int gridSize=20; public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; paintBackground(g2d);

我有一个java应用程序,可以在其中绘制字符串。



现在,我想调整适合网格的每个字符前后的空格(每个字符在各自的正方形中)。我怎样才能做到这一点?谢谢你的回答

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);
    }
}
公共类FontTesting扩展了小程序{
私有最终int gridSize=20;
公共空间涂料(图g){
Graphics2D g2d=(Graphics2D)g;
绘画背景(g2d);
String text1=“atzlipjnmr..A |”;
String text2=“hhhhhhh..I |”;
String text3=“ww,9 |”;
字符串text4=“atat |”;
Font Font=新字体(“等距”,Font.PLAIN,20);
g2d.setColor(Color.BLACK);
g2d.setFont(字体);
g2d.setRenderingHint(RenderingHints.KEY\u TEXT\u抗锯齿,
RenderingHints.VALUE\u TEXT\u ANTIALIAS\u ON);
g2d.抽绳(text1、20、36);
g2d.setRenderingHint(RenderingHints.KEY\u TEXT\u抗锯齿,
RenderingHints.VALUE\u TEXT\u ANTIALIAS\u ON);
g2d.抽绳(text2.toUpperCase(),20,56);
g2d.setRenderingHint(RenderingHints.KEY\u TEXT\u抗锯齿,
RenderingHints.VALUE\u TEXT\u ANTIALIAS\u ON);
g2d.抽绳(text3.toUpperCase(),20,76);
g2d.setRenderingHint(RenderingHints.KEY\u TEXT\u抗锯齿,
RenderingHints.VALUE\u TEXT\u ANTIALIAS\u ON);
g2d.drawString(text4.toUpperCase(),20,96);
}
公共静态void main(字符串[]args){
帧f=新帧(“抗锯齿文本样本”);
f、 addWindowListener(新的WindowAdapter(){
公共无效窗口关闭(WindowEvent e){
系统出口(0);
}
});
f、 添加(新FontTesting());
f、 挫折地面(颜色:白色);
f、 设置尺寸(新尺寸(300、180));
f、 setVisible(真);
}
专用void paintBackground(Graphics2D g2){
g2.setPaint(颜色为灰色);
对于(int i=0;i

}

将文本字符串逐字符绘制到网格中。看看这个方法

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);   
    }  
}

你能和我们分享你的代码吗?这很有效,谢谢。但我遇到了另一个问题。我将画一个字符串,我将从一个.txt文件。问题是,如果txt文件将有多行,我如何知道何时必须转到下一行?如果将文件中的所有文本读入一个
字符串
,则可以按换行符
\n
将其拆分,并编写如下内容:
int I=1;对于(字符串行:text.split(“\n”))paintText(g2d,i++,行)
paintText(g2d, 1, text1);
paintText(g2d, 2, text2);
[...]