2015-01-26 38 views
1

DefaultListModel을 사용하여 데이터베이스에서 JList로로드 된 POJO를 출력하는 데 흥미로운 문제가 있습니다. 어떻게됩니까Java의 DefaultListModel이 addElement 메소드의 인수로 전달 된 String을 수정합니다.

private String formPersonDataStringRepresentation(PersonData personData) { 

     // ... checking the argument ... 

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

콘솔 대 때 인쇄 할 때 내 출력이 달라 보이는 것입니다 : PersonData 객체를 받아 문자열이 제시된 보이는 생성

 // 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); 

방법 : 간단히,이 내 코드입니다 동일한 서식 ("% -17s % -17s")이 사용되지만 DefaultListModel의 인수로 사용됩니다.

더 나은 이해를 위해 콘솔 및 스윙 출력의 스크린 샷을 첨부하고 있습니다.

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

내가 이러한 경우에 DefaultListModel를 사용하지 않도록해야합니까?

+1

나에게도 똑같은 모양으로 보이지만, 콘솔은 모노 스페이스 글꼴이고 스윙의 기본 (Arial?)은 맞지 않다는 것을 알고 있습니까? –

+0

JList의 글꼴을 명시 적으로 설정하여 정확합니다. list.setFont (새 글꼴 ("Monospaced", Font.PLAIN, 12)); 출력 방식이 변경되었습니다. 생성 된 공백을 검사해야합니다. – Pavol

+0

우수 - 향후 Google 직원을위한 답변으로 재 게시했습니다. –

답변

2

공간이 아닙니다. 글꼴입니다. 콘솔은 모노 스페이스이며, Swing은 기본적으로 다른 것을 사용합니다 (Arial?).

질문 코멘트에서 발견으로

, 당신은 단순히으로 고정 폭 글꼴의 기본 스윙 글꼴을 변경할 수 있습니다

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

가 더 밀접하게 서식 콘솔과 일치하도록.