1

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

}

行の折り返しの発生を妨げているのは何ですか?

4

1 に答える 1

1

私の状況との関連性はすぐにはわかりませんでしたが、この他のスタックオーバーフローの投稿で私の答えを見つけました: https://stackoverflow.com/questions/7306295/swing-jlist-with-multiline-text-and-dynamic-height rq=1

于 2013-07-03T18:54:28.637 に答える