【发布时间】:2015-03-24 19:29:13
【问题描述】:
我在尝试使用 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()
);
}
发生的情况是,尽管使用了相同的格式 "%-17s%-17s",但打印到控制台与用作 DefaultListModel 中的参数时,我的输出看起来不同。
我附上控制台和 Swing 输出的屏幕截图以便更好地理解。
在这种情况下我必须避免使用 DefaultListModel 吗?
【问题讨论】:
-
在我看来它的格式是一样的——但你意识到控制台是等宽字体,而 Swing 中的默认(Arial?)不是,对吧?
-
你是对的,明确设置JList的字体 list.setFont(new Font("Monospaced", Font.PLAIN, 12));改变了输出的外观。我应该检查生成的空格,我的错。
-
非常好 -- 我转发了这篇文章,作为未来 Google 员工的答案。
-
谢谢,这正是我所期待的。再次感谢
标签: java string-formatting jlist defaultlistmodel