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;
}
}
行の折り返しの発生を妨げているのは何ですか?