Java 中的 DefaultListModel 修改作为参数传递给 addElement 方法的字符串
DefaultListModel in Java modifies a String passed as an argument to addElement method
我在尝试使用 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 对象并生成字符串的方法如下所示:
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?)。
正如在问题评论中发现的那样,您可以简单地将默认的 Swing 字体更改为等宽字体:
list.setFont(new Font("Monospaced", Font.PLAIN, 12));
使其更符合控制台格式。
我在尝试使用 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 对象并生成字符串的方法如下所示:
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?)。
正如在问题评论中发现的那样,您可以简单地将默认的 Swing 字体更改为等宽字体:
list.setFont(new Font("Monospaced", Font.PLAIN, 12));
使其更符合控制台格式。