2016-03-05 12 views
5

Ho provato a cercare ma non riesco a trovare una soluzione al mio problema di giustificazione. Voglio che tutti gli importi della transazione, che si presentano con 2 cifre decimali, siano tutti giustificati a destra, tuttavia, nulla di ciò che cerco sembra funzionare. Questo è il risultato:Giustificazione Giusta in Java

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

Sembra che si dovrà modificare la spaziatura prima del numero decimale in base alla lunghezza del numero Sono abbastanza sicuro di come farlo con String.format sebbene – Azulflame

+5

Usa font a larghezza costante. – saka1029

+0

Che cosa ha detto saka1029, e in aggiunta: immagino che non ti piacerebbe nemmeno la giustificazione giusta, ma un allineamento dei punti '.' (altrimenti, se tu avessi numeri giustificati a destra come" 1.11 "e" 1.99 ", i punti non si allinea) – Marco13

risposta

3

Un'alternativa all'utilizzo di una larghezza fissa font (come suggerito nei commenti) o diversi widget con un migliore controllo dell'allineamento (come suggerito in una risposta diversa) potrebbe essere quello di sostituire i caratteri dello spazio davanti alle cifre con caratteri dello spazio che hanno la stessa larghezza delle cifre (Se il tipo di carattere ha una larghezza fissa per le cifre, che lo screenshot sembra supportare):

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

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

+0

Questo ha funzionato. Grazie! –

1

Sembra che JTable può essere una misura migliore per ciò che si sta cercando di fare di un semplice 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

Non riesco davvero a testarlo, poiché non ho l'intero codice OP. Ma modifico di conseguenza – Azulflame

+0

Non dovresti aver bisogno di usare spazi per il riempimento se hai ragione a giustificare una singola colonna. –

Problemi correlati