Monospace Swing Text

时间:2012-07-21 00:51:01

标签: java swing jlabel ascii-art monospace

我编写了一个拍摄照片并创建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并且工作得更好。唯一的问题是即使是一个很小的字体,框架通常在屏幕外。但我有一个方法可以改变采样的像素数,这会使输出更小。

1 个答案:

答案 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);

}