2013-07-03 191 views
1

我正在使用JList來包裝顯示給用戶的一些變量只讀文本。的每一行文本呈現在基於的JTextArea列表細胞,即行自動換行JList Cells

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; 
    } 

} 

什麼可能會阻止發生換行?

+0

(HTTP [鞦韆多行文本和動態高度的JList]的可能重複:// stackoverflow.com/questions/7306295/swing-jlist-with-multiline-text-and-dynamic-height) – Aboutblank

回答