2012-07-21 11 views
2

我写了一个程序,它拍摄一张照片并创建一个ASCII表示(ASCII艺术)。起初,我将ASCII字符串写入控制台,但现在我有一个包含文本的JLabel。但是,JLabel输出是不规则的,不如控制台输出。我尝试在JLabel中使用等宽字体(Droid Sans Mono)作为字体,因为它是我用于控制台输出的字体,但输出仍然不规则。在Swing/JLabel中指定等宽字体是否有更好的方法?等宽摆动文本

下面是我用它来创建JLabel中的方法:

public JLabel formatLabel(){ 
    String l = "<html>"; 
    for(int j = 0; j < height; j+=patchSize){ 
    for(int k = 0; k < width; k+=patchSize){ 
     l+=imageArray.get(j).get(k); 
    } 
    l+="<br>"; 
    } 
    l+="</html>"; 
    return new JLabel(l); 
} 

我使用指定字体行:

label.setFont(new Font("Droid Sans Mono", Font.PLAIN, 6)); 

编辑:我改变JLabel以一个JTextArea和效果更好。唯一的问题是即使是一个很小的字体,框架通常在屏幕之外。但是我有一种方法可以改变像素的数量,从而使输出变小。

+2

尝试使用'label.setFont(新字体(Font.MONOSPACED,Font.PLAIN,6));'看,如果这就是问题所在。 – rtheunissen 2012-07-21 01:08:14

回答

2

您可以使用html字体标签指定文字的字体。

通过在标签的文本中指定HTML代码,可以为标签提供各种特征,如多行,多字体或多种颜色。如果标签只使用单一颜色或字体,则可以使用setForeground或setFont方法来避免HTML处理的开销。

public JLabel formatLabel(){ 
String l = "<html><font face=\"verdana\" color=\"green\" size=\"12\">"; 
for(int j = 0; j < height; j+=patchSize){ 
for(int k = 0; k < width; k+=patchSize){ 
    l+=imageArray.get(j).get(k); 
} 
l+="<br>"; 
} 
l+="</html>"; 
return new JLabel(l); 

}

+1

你的报价表明OP有什么工作。 – Jeffrey 2012-07-21 01:12:29

+0

我还在编辑我的文章,以包括OP代码,以包括HTML标签后面的字体标签。 – user1420750 2012-07-21 01:16:12

+0

是否已知该html行可用? html标签已经在引号内,所以字体名称和字体颜色不会包含在字符串中。 – nh0815 2012-07-21 01:19:11