等宽的html格式化jlabel

时间:2017-03-01 15:59:15

标签: html jlabel

我正在为处理矩阵的程序创建一个输出窗口。它应该打印出预先形成的命令以及矩阵的格式化版本。但我对齐问题。我知道String.format有效,因为我有一个toString()方法可以正常工作。

https://i.stack.imgur.com/rqfzG.png

注意第二行和第三行的间距不正确。这是因为100.00已经完全填充了格式化的字符串,因为0.00需要额外的空格来填充字符串(参见toHtml())。我相信这与HTML的显示方式有关,但我不确定。我的猜测是零后面的空格没有正确显示或正在合并。

以下是涉及的方法。

public String toHtml(int dec)
{
    String[] colors = {"#C0C0C0","#FFFFFF"};
    String f = "%-"+(getLongestValue()+dec+1)+"."+dec+"f";
    String res = "";
    for(int r = 0;r<rows;r++)
    {
        for(int c = 0;c<columns;c++)
        {
            res += "<span style=\"background-color:"+colors[(r+c)%2]+";\">"+String.format(f, contents[r][c])+"</span>";
        }
        res += "<p>";
    }
    return res;
}

创建要显示的HTML文本。方法getLongestValue()返回数组'contents'中小数位前的任何数字的最大长度。

newOutput("New Matrix ["+name+"]<br>"+m.toHtml());

public void newOutput(String s)
{
    JLabel l = new JLabel("<html>"+s+"<br></html>");
    l.setFont(new Font("Monospaced",1,18));
    jPanel1.add(l);
}

将标签添加到输出窗口

此外,这里是参考

的toString()方法
public String toString()
{
    String f = "%-"+(getLongestValue()+3)+".2f ";
    String res = "";
    for(int r = 0;r<rows;r++)
    {
        for(int c = 0;c<columns;c++)
        {
            res += String.format(f, contents[r][c]);
        }
        res += "\n";
    }
    return res;
}

通过toString()输出Matrix toString Output

更极端的版本 https://i.stack.imgur.com/ZQKnB.png

在这种情况下,程序应该发现最大值为-15或-20,并将格式长度的大小设置为6(长度为3,小数点为2,小数点为1)除了我提到的两个值之外,任何值都不符合格式。

这是前一个示例的toString()的输出 toString() output

1 个答案:

答案 0 :(得分:1)

这解决了这个问题,空间没有被正确地表示为等宽

inline CLS operator+(const char *lhs, const CLS& rhs)
{
    return CLS(lhs) + rhs;
}