Java中的DefaultListModel修改作为addElement方法的参数传递的String

时间:2015-01-26 11:27:39

标签: java string-formatting jlist defaultlistmodel

我正面临一个有趣的问题,试图使用DefaultListModel将从数据库加载的POJO输出到JList。 简而言之,这是我的代码:

        // load POJO objects from the DB
        PersonData[] allUsers = loadAllUserData();

        DefaultListModel listModel = new DefaultListModel();

        // fill in (with) the data
        for (int i = 0; i < allUsers.length; i++) {
            listModel.addElement(formPersonDataStringRepresentation(allUsers[i]));
        }

        JList list = new JList(listModel);
        usersList = new JScrollPane(list);

获取PersonData对象并生成String的方法如下所示:

private String formPersonDataStringRepresentation(PersonData personData) {

        // ... checking the argument ...

        // ... formatting ...
        return String.format("%-17s%-17s", personData.getUsername(),
                personData.getForename()
                );
    }

虽然使用相同的格式&#34;% - 17s%-17s&#34; ,但在打印到Console时我的输出与在DefaultListModel中用作参数时的输出看起来不同。

我附上了Console和Swing输出的屏幕截图,以便更好地理解。

Comparison of the output printed from console and the one generated by JList using the same String data

在这种情况下,我是否必须避免使用DefaultListModel?

1 个答案:

答案 0 :(得分:2)

不是空格,它是字体 - 控制台是等宽的,Swing默认使用其他东西(Arial?)。

正如在问题评论中发现的那样,您只需将默认的Swing字体更改为等宽字体:

list.setFont(new Font("Monospaced", Font.PLAIN, 12));

让它更紧密地匹配控制台格式。