3

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

4

1 回答 1

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

}

于 2012-07-21T01:10:26.747 回答