8

基本的なスイング JTable があり、セルをクリックすると行全体が強調表示され、クリックされたセルは強調表示された行の残りの色とは異なる色になる必要があります。

現在、私はisRowSelectionAllowedtrueにしています

次のようなカスタムTableCellRendererを使用してみました:

public class CustomTableCellRenderer extends DefaultTableCellRenderer
{

public static final DefaultTableCellRenderer    DEFAULT_RENDERER    = new DefaultTableCellRenderer();
    @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

    if (isSelected) {
        c.setBackground(Color.red);
    }
    else {
        c.setForeground(Color.black);
        c.setBackground(Color.white);
    }
    return c;   
  }     
}

しかし、それは機能していないようです (行全体が赤で強調表示されました)。

また、次のように UIManager プロパティを設定しようとしました。

UIManager.put("Table.focusCellBackground", 
         new javax.swing.plaf.ColorUIResource (Color.red));

しかし、それもうまくいかないようです(ただし、使用して境界線を設定しようとしたとき

UIManager.put("Table.focusCellHighlightBorder", 
         new BorderUIResource.LineBorderUIResource(Color.red)); 

うまくいきました)

私がする必要があるかもしれない提案を教えてください。

4

3 に答える 3

11

これを試して:

jtable.setCellSelectionEnabled(true);

次に、getTableCellRendererComponent

if (table.isCellSelected(row, column))
    setForeground(Color.red);
else if (table.isRowSelected(row))
    setForeground(Color.green);
else if (table.isColumnSelected(column))
    setForeground(Color.blue);
else
    setForeground(Color.black);

これにより、選択したセルが赤、行の残りの部分が緑、列の残りの部分が青でレンダリングされます。注: セル選択では、選択モデルが単一である必要があります。他の選択モデルでは、予期しない動作が発生する可能性があります。

于 2011-07-29T03:27:43.437 に答える
4

しかし、それはうまくいかなかったようです(行全体が赤で強調表示されています)。

「isSelected」変数ではなく、「hasFocus」変数をチェックする必要があります。

複数のカスタムレンダラーを作成する代わりに(テーブルに異なるクラスタイプの列がある場合)別のオプションは、テーブル行レンダリングアプローチを使用することです。

于 2011-07-28T16:23:50.290 に答える
3

テーブルの行選択をオフにし、セル選択をオンにする必要があります。次に、必要に応じて前に戻って行を強調表示する方法を見つけます。

于 2011-07-28T16:14:34.703 に答える