2016-03-05 13 views
5

Próbowałem szukać, ale nie mogę znaleźć rozwiązania mojego problemu z uzasadnieniem. Chcę, aby wszystkie kwoty transakcji, które pojawiają się z 2 cyfr dziesiętnych, były uzasadnione z prawej strony, jednak nic, co próbuję, wydaje się działać. Jest to wynikiem:Prawidłowe justowanie w Javie

Java dialog with unaligned numbers

Transaction temp; 
    String message = ""; 
    for (int i = 0; i < checkAccnt.gettransCount(); i++) 
    { 
     temp = checkAccnt.getTrans(i); 
     message += String.format("%-10d", temp.getTransNumber()); 
     message += String.format("%-10d", temp.getTransId()); 
     message += String.format("%10.2f", temp.getTransAmount()) + '\n'; 
    } 
    JOptionPane.showMessageDialog(null, message); 
+0

Wydaje się, że trzeba by zmienić odstępy przed liczbą dziesiętną w zależności od długości liczby. Jestem całkiem pewien, jak to zrobić za pomocą String.format, jednak: – Azulflame

+5

Użyj czcionki o stałej szerokości. – saka1029

+0

Co powiedział saka1029, a ponadto: Myślę, że nie chciałbyś nawet usprawiedliwienia, ale wyrównanie punktów "." (W przeciwnym razie, gdybyś miał wyrównane do prawej liczby jak "1.11" i "1.99", punkty nie wyrównają) – Marco13

Odpowiedz

3

alternatywa do stosowania stałej szerokości znaków czcionka (zgodnie z sugestiami w komentarzach) lub różne widżety z lepszą kontrolą wyrównania (jak sugerowano w innej odpowiedzi) może polegać na zastąpieniu znaków spacji przed cyframi znakami spacji o tej samej szerokości co cyfry (Jeśli czcionka ma stałą szerokość dla cyfr, która wydaje zrzut do wsparcia):

message += String.format("%-10d", temp.getTransNumber()).replace(' ', '\u2007'); 

Zobacz http://www.fileformat.info/info/unicode/char/2007/index.htm

+0

To działało. Dzięki! –

1

Wydaje się, że JTable może być lepiej pasuje do tego, co staramy się robić, niż tylko String.format()

int rows = checkAccnt.size(); // guess as to the appropriate method name, but you get the idea 
int cols = 3;// based off of number of coloumns in the For statement 

JTable table = new JTable(rows, cols); 
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); 
rightRenderer.setHorizontalAlignment(JLabel.RIGHT); 
table.getColumnModel().getColumn(3).setCellRenderer(rightRenderer); 

Transaction temp; 
String message = ""; 
for (int i = 0; i < checkAccnt.gettransCount(); i++) 
{ 
    temp = checkAccnt.getTrans(i); 
    table.setValueAt(String.format("%-10d", temp.getTransNumber()), i, 0); 
    table.setValueAt(String.format("%-10d", temp.getTransId()), i, 1); 
    table.setValueAt(String.format("%10.2f", temp.getTransAmount()), i, 2); 
} 
JOptionPane.showMessageDialog(null, table); 
+1

Nie mogę tego przetestować, ponieważ nie mam całego kodu OP. Ale będę edytować odpowiednio – Azulflame

+0

Nie powinieneś używać spacji do wypełniania, jeśli masz rację - uzasadniając jedną kolumnę. –