4

を使用してJTableデータを表示しています。JTableユーザーは、個々のセルではなく、行全体のみを選択できます。行の選択のみを許可するために使用されるコードは次のとおりです。

jTable1.setCellSelectionEnabled(false);
jTable1.setColumnSelectionEnabled(false);
jTable1.setRowSelectionAllowed(true);
jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

ただし、ユーザーが行を選択すると、その行のセルがアウトライン化されます (下の画像の最初の列/最後の行):

ここに画像の説明を入力

このアウトラインを無効にするにはどうすればよいですか?

4

2 に答える 2

6

単純に を拡張してDefaultTableCellRenderer、UI 側から、セルが「フォーカスされていない」ふりをすることができます。

次のレンダラーを使用して境界線を削除しました。

private static class BorderLessTableCellRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = 1L;

    public Component getTableCellRendererComponent(
            final JTable table,
            final Object value,
            final boolean isSelected,
            final boolean hasFocus,
            final int row,
            final int col) {

        final boolean showFocusedCellBorder = false; // change this to see the behavior change

        final Component c = super.getTableCellRendererComponent(
                table,
                value,
                isSelected,
                showFocusedCellBorder && hasFocus, // shall obviously always evaluate to false in this example
                row,
                col
        );
        return c;
    }
}

次のように JTable に設定できます。

table.setDefaultRenderer( Object.class, new BorderLessTableCellRenderer() );

または、文字列の場合:

table.setDefaultRenderer( String.class, new BorderLessTableCellRenderer() );

単純に元のレンダラーを再利用し、フォーカスされた/選択されたセルがそうではないふりをしているという点で、これは少しハックですが、開始する必要があります。

于 2012-10-29T16:02:45.377 に答える
0

この動作を変更するための非常に簡単なトリックを見つけました。セル フォーカスはテーブル フォーカスの拡張であることがわかります。テーブルが個々のセルにもフォーカスできない場合 (ただし、行の選択は表示されます)。

必要なのは、1 行の単純なコードだけです。

jTable1.setFocusable(false);

これは、これと同じ動作を実装する私のプロジェクトの写真です (注: Windows の LookAndFeel を使用しています)。

フォーカス不能細胞

行全体の下でクリックした列に関係なく、選択されていますが、クリックしたセルはフォーカスされていません。それが役立つことを願っています!:)

于 2017-07-24T21:29:10.743 に答える