У меня возникает интересная проблема, пытающаяся вывести POJO, загруженную из базы данных, в JList, используя DefaultListModel. Короче говоря, это мой код:DefaultListModel в Java изменяет строку, переданную в качестве аргумента методу addElement
// 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()
);
}
Что происходит, что мой выход выглядит иначе при печати на консоли VS. когда это используется как аргумент в DefaultListModel, хотя используется то же форматирование «% -17s% -17s».
У меня есть скриншот выхода Console и Swing для лучшего понимания.
Должен ли я избегать использования DefaultListModel в таком случае?
Он выглядит отформатированным для меня - но вы понимаете, что консоль является моноширинным шрифтом, а по умолчанию (Arial?) В Swing нет, не так ли? –
Вы правы, явным образом устанавливаю Font для JList list.setFont (новый шрифт («Monospaced», Font.PLAIN, 12)); изменил вид вывода. Я должен был проверить порожденные пробелы, я плохо. – Pavol
Отлично - я переписал это как ответ будущим Googlers. –