2017-03-01 1 views
0

Ich erstelle ein Ausgabefenster für ein Programm mit Matrizen. Es soll den vorgefertigten Befehl zusammen mit einer formatierten Version der Matrix ausgeben. Aber ich habe Probleme mit der Ausrichtung. Ich weiß, dass die String.format funktioniert, weil ich eine toString() Methode habe, die richtig funktioniert.Monospaced HTML-Formatierung jlabel

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

bemerken, wie die zweite und dritte Reihe ist nicht richtig beabstandet ist. Dies liegt daran, dass die 100.00 die formatierte Zeichenfolge vollständig ausgefüllt hat, während die 0.00s zusätzliche Leerzeichen benötigen, um die Zeichenfolge zu füllen (siehe toHtml()). Ich glaube, das hat etwas damit zu tun, wie HTML angezeigt wird, aber ich bin mir nicht sicher. Meine Vermutung ist, dass die Leerzeichen hinter den Nullen nicht richtig angezeigt werden oder kombiniert werden.

Hier sind die Methoden beteiligt.

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

erstellt den HTML-Text, der angezeigt werden soll. Die Methode getLonestValue() gibt die größte Länge einer Zahl vor ihrer Dezimalstelle im Array 'contents' zurück.

und

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

, die die Markierung an das Ausgabefenster

Auch hier hinzufügt, wird die Methode toString() Referenz

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

Ausgang der Matrix durch toString() toString Output

A m Oder extreme Version

In diesem Fall sollte das Programm gefunden haben, dass die größten Werte -15 oder -20 waren und die Größe der Formatlänge auf 6 (3 für die Länge, 2 für die Dezimalstellen und 1 für die Dezimalzahl), aber stattdessen scheint es, dass keiner der Werte neben den beiden, die ich erwähnte, dem Format folgen.

ist die Ausgabe von toString() für das vorherige Beispiel toString() output

+0

Können Sie genau schreiben, was Sie zu erwarten haben? –

Antwort

1

Dies behebt es, die Räume Arent dargestellt werden, richtig Monospace als

public String toHtml(int dec) 
{ 
    String[] colors = {"#C0C0C0","#FFFFFF"}; 
    String f = "%-"+(getLongestValue()+dec+2)+"."+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]).replaceAll("\\s", ((char)160)+"")+"</span>"; 
     } 
     res += "<p>"; 
    } 
    return res+""; 
}