Line Wrap在JList Cells内部不起作用

时间:2013-07-03 16:49:32

标签: java swing jlist jtextarea listcellrenderer

我正在使用JList来包装显示给用户的一些变量只读文本。每行文本都基于JTextArea在列表单元格中呈现,即

public class InfoTextCellRenderer extends JTextArea implements ListCellRenderer

此列表使用此渲染器:

textList.setCellRenderer(new InfoTextCellRenderer());

JList嵌入在JScrollPane中。

我这样做是因为这里的典型使用模式是使用箭头键而不是鼠标。这允许突出显示当前单元格,使用户明白发生了什么。之前的实现,使用单个JTextArea,要求用户多次按下箭头,直到看不见的插入符号(因为它不可编辑而不可见)到达可能发生滚动的位置(窗口的底部或顶部)。

问题在于,即使InfoTextCellRenderer打开换行和自动换行,当显示文本时也不会发生换行。

public class InfoTextCellRenderer extends JTextArea implements ListCellRenderer {

    public InfoTextCellRenderer() {
        this.setFocusable(false);
    }

    /* (non-Javadoc)
     * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
     */
    @Override
    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {
        if (isSelected) {
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());
        } else {    
            setBackground(list.getBackground());
            setForeground(list.getForeground());
        }
        setEditable(false);
        setFont(list.getFont());
        this.setLineWrap(true);          
        this.setWrapStyleWord(true);
        setText(value == null ? "" : value.toString());
        return this;
    }

}

什么可能阻止换行?

1 个答案:

答案 0 :(得分:1)

在其他Stack Overflow帖子上找到了我的答案,虽然我没有立即清楚它与我的情况的相关性: https://stackoverflow.com/questions/7306295/swing-jlist-with-multiline-text-and-dynamic-height?rq=1