我编写了一个拍摄照片并创建ASCII表示(ASCII艺术)的程序。起初,我将ASCII字符串写入控制台,但现在我有一个保存文本的JLabel。但是,JLabel输出是不规则的,并不像控制台输出那样均匀。我尝试使用等宽字体(Droid Sans Mono)作为JLabel中的字体,因为它是我用于控制台输出的,但输出仍然是不规则的。有没有更好的方法在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并且工作得更好。唯一的问题是即使是一个很小的字体,框架通常在屏幕外。但我有一个方法可以改变采样的像素数,这会使输出更小。
答案 0 :(得分: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);
}