Java中的正确理由

时间:2016-03-05 23:26:14

标签: java

我试过看,但我似乎无法找到解决我的理由问题的方法。我希望所有的交易金额,以2位小数位数,都是正确的,但是,我尝试的任何东西似乎都没有用。这是结果:

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

2 个答案:

答案 0 :(得分:3)

使用固定宽度字体(如注释中所示)或具有更好对齐控制的不同窗口小部件(如不同答案中所建议)的替代方法可能是用空格字符替换数字前面的空格字符与数字相同的宽度(如果字体具有固定的数字宽度,屏幕截图似乎支持):

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

请参阅http://www.fileformat.info/info/unicode/char/2007/index.htm

答案 1 :(得分: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);