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
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
Können Sie genau schreiben, was Sie zu erwarten haben? –