2016-03-05 2 views
5

Я пробовал смотреть, но я не могу найти решение моей проблемы с обоснованием. Я хочу, чтобы все суммы транзакций, которые включались с 2 цифрами десятичных знаков, были все оправданы справа, однако ничего, что я пытаюсь, похоже, работает. Это результат:Право Обоснование в 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

кажется, что вы должны изменить пробела до десятичного числа в зависимости от длины от числа. Я совершенно уверен, как это сделать с String.format, хотя – Azulflame

+5

Используйте шрифт постоянной ширины. – saka1029

+0

Что сказал saka1029, и дополнительно: я думаю, вам даже не понравилось бы выравнивание по правому краю, но выравнивание точек '.' (в противном случае, если бы у вас были правомерные числа, такие как« 1.11 »и« 1.99 », точки не будет выравниваться) – Marco13

ответ

3

альтернатива использованию фиксированной ширины шрифт (как предлагается в комментариях) или разные виджеты с лучшим контролем выравнивания (как предлагается в другом ответе), возможно, это замена символов пробела перед цифрами символами пробега, которые имеют ту же ширину, что и цифры (Если шрифт имеет фиксированную ширину для цифр, которые скриншот, кажется, поддерживает):

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

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

+0

Это сработало. Благодаря! –

1

Кажется, что JTable может быть лучше подходят для того, что вы пытаетесь сделать, чем просто 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

Я не могу это проверить, так как у меня нет всего кода OP. Но я отредактирую соответственно – Azulflame

+0

Вам не нужно использовать пробелы для заполнения, если вы правы, оправдывая один столбец. –

Смежные вопросы