我面临一个有趣的问题,试图使用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?)。

正如问题注释中发现的那样,您可以使用以下命令将默认的Swing字体更改为等宽字体:

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


使它更匹配控制台格式。

关于java - Java中的DefaultListModel修改作为参数传递给addElement方法的String,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28149205/

10-08 22:08