10

より多くのコンテンツを読み取ることができるように、セルがワード ラップを行うためのカスタム セル レンダラーがあります。コードは次のとおりです。

import java.awt.Color;
import java.awt.Component;
import java.awt.Insets;

import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;

public class TextWrapCellRenderer extends JTextArea implements TableCellRenderer {
    private static final long serialVersionUID = 1L;

    public TextWrapCellRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
        setMargin(new Insets(0, 5, 0, 5));
        setSelectionColor(Color.GREEN);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        setText((String)value);
        setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height);
        setSelectionColor(Color.GREEN);

        return this;
    }
}

更新: セル レンダラーは適切に使用されますが、ユーザーが JTable 内の行を選択すると、非カスタム レンダリング セルの強調表示のみが表示されます。ただし、その行の他のすべてのセルに対して強調表示が表示されます。これにより、背景が白いセルが1つだけ残り、行の残りの部分は強調表示された背景色として青(私の場合)になります。

4

3 に答える 3

13

isSelectedセルが選択されているかどうかを確認するには、次のような引数を確認する必要があります。

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
{
        setText((String)value);
        setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height);
        setSelectionColor(Color.GREEN);

        if (isSelected)
        {
            setBackground(table.getSelectionBackground());
            setForeground(table.getSelectionForeground());
        }
        else
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
        }
        return this;
    }
于 2011-04-05T20:34:16.617 に答える
3

最初にデフォルトの実装を呼び出す必要があると思います:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
    ...

デフォルトの実装は、isSelectedやなどの通常の引数をすべて処理しhasFocus、テキストと背景色を設定し、フォーカス境界線をアクティブにします。次に、表示されるテキストを変更し、セル サイズを変更しますreturn this

于 2011-04-05T20:22:46.603 に答える
-1

setSelectionColor(Color.GREEN); の使用 ユーザーが選択したものが緑色であることを伝えています。あなたの問題は何ですか?あなたのコードは何を期待していますか?

于 2011-04-05T19:41:10.607 に答える