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;
}
}
什麼可能會阻止發生換行?
(HTTP [鞦韆多行文本和動態高度的JList]的可能重複:// stackoverflow.com/questions/7306295/swing-jlist-with-multiline-text-and-dynamic-height) – Aboutblank