JTableのCellEditorを編集不可だが選択・コピーを可能に変更する
Total: 4238
, Today: 3
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTable
のCellEditor
として編集不可・選択コピー可能なJTextField
を設定します。
Screenshot
Advertisement
サンプルコード
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
table.setFillsViewportHeight(true);
// table.setFocusable(false);
// table.setCellSelectionEnabled(false);
table.setSelectionForeground(Color.BLACK);
table.setSelectionBackground(new Color(0xEE_EE_EE));
JTextField field = new JTextField();
field.setEditable(false);
field.setBackground(table.getSelectionBackground());
field.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
field.setComponentPopupMenu(new TextComponentPopupMenu());
DefaultCellEditor cellEditor = new DefaultCellEditor(field);
cellEditor.setClickCountToStart(1);
table.setDefaultEditor(Object.class, cellEditor);
View in GitHub: Java, Kotlin解説
JTable#isCellEditable(...)
などをオーバーライドしてJTable
を編集不可にするとセル内の文字列を部分選択してコピーできない- デフォルトの
JTable
ではセルを選択してCtrl+Cを入力しても列がタブ区切りでコピーされる Object.class
のDefaultCellEditor
として編集を不可にしたJTextField
を設定することで編集は不可だが、文字列を選択してのコピーは可能にするJTextField#setEditable(false)
で編集不可に設定JTextField#setBackground(JTable#getSelectionBackground())
でセルエディタの背景色をJTable
の選択時背景色と同じに変更JTextField#setComponentPopupMenu(...)
でポップアップメニューからのコピーも可能にするDefaultCellEditor#setClickCountToStart(1)
を使用してシングルクリックでセルエディタが起動するよう設定し直接文字列の選択を可能にする