2015-01-26 2 views
1

У меня возникает интересная проблема, пытающаяся вывести 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 для лучшего понимания.

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

Должен ли я избегать использования DefaultListModel в таком случае?

+1

Он выглядит отформатированным для меня - но вы понимаете, что консоль является моноширинным шрифтом, а по умолчанию (Arial?) В Swing нет, не так ли? –

+0

Вы правы, явным образом устанавливаю Font для JList list.setFont (новый шрифт («Monospaced», Font.PLAIN, 12)); изменил вид вывода. Я должен был проверить порожденные пробелы, я плохо. – Pavol

+0

Отлично - я переписал это как ответ будущим Googlers. –

ответ

2

Это не пространство, это шрифт - консоль моноширинная, а Swing использует что-то еще (Arial?) По умолчанию.

Как выяснил в комментариях вопроса, вы можете просто изменить Свинг по умолчанию шрифта на шрифт с моноширинномом:

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

, чтобы он соответствовал консоли более близко форматирование.