Swing/ScrollingCellEditor のバックアップ差分(No.6)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/ScrollingCellEditor へ行く。
- 1 (2011-06-20 (月) 14:39:55)
- 2 (2012-12-20 (木) 12:00:20)
- 3 (2012-12-27 (木) 14:18:20)
- 4 (2013-08-16 (金) 16:34:16)
- 5 (2014-06-04 (水) 22:11:47)
- 6 (2014-10-29 (水) 01:43:13)
- 7 (2014-11-26 (水) 18:18:45)
- 8 (2016-02-05 (金) 16:42:47)
- 9 (2017-07-05 (水) 13:57:15)
- 10 (2018-07-06 (金) 16:33:20)
- 11 (2019-05-22 (水) 19:35:38)
- 12 (2020-07-02 (木) 04:19:27)
- 13 (2021-12-03 (金) 06:54:56)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:TableCellEditorをスクロール可能にする #navi(../) #tags(JTable, JScrollPane, JTextArea, TableCellEditor, Focus) RIGHT:Posted by &author(aterai); at 2011-06-20 * TableCellEditorをスクロール可能にする [#i988a941] --- title: TableCellEditorをスクロール可能にする tags: [JTable, JScrollPane, JTextArea, TableCellEditor, Focus] author: aterai pubdate: 2011-06-20T14:39:55+09:00 description: JTableのTableCellEditorとして、JTextAreaとJScrollPaneを使用します。 --- * 概要 [#i988a941] `JTable`の`TableCellEditor`として、`JTextArea`と`JScrollPane`を使用します。 #download #ref(https://lh4.googleusercontent.com/-DDRbJ9WhSJk/Tf7btYjUE7I/AAAAAAAAA9s/yVKIKC55zIw/s800/ScrollingCellEditor.png) #download(https://lh4.googleusercontent.com/-DDRbJ9WhSJk/Tf7btYjUE7I/AAAAAAAAA9s/yVKIKC55zIw/s800/ScrollingCellEditor.png) ** サンプルコード [#gf065aec] * サンプルコード [#gf065aec] #code(link){{ class TextAreaCellEditor extends JTextArea implements TableCellEditor { private final JScrollPane scroll; public TextAreaCellEditor() { scroll = new JScrollPane(this); setLineWrap(true); KeyStroke enter = KeyStroke.getKeyStroke( KeyEvent.VK_ENTER, InputEvent.CTRL_MASK); getInputMap(JComponent.WHEN_FOCUSED).put(enter, new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { stopCellEditing(); } }); } @Override public Object getCellEditorValue() { return getText(); } @Override public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column) { setFont(table.getFont()); setText((value!=null)?value.toString():""); EventQueue.invokeLater(new Runnable() { @Override public void run() { setCaretPosition(getText().length()); requestFocusInWindow(); } }); return scroll; } @Override public boolean isCellEditable(final EventObject e) { if(e instanceof MouseEvent) { return ((MouseEvent)e).getClickCount() >= 2; } EventQueue.invokeLater(new Runnable() { @Override public void run() { if(e instanceof KeyEvent) { KeyEvent ke = (KeyEvent)e; char kc = ke.getKeyChar(); if(Character.isUnicodeIdentifierStart(kc)) { setText(getText()+kc); } } } }); return true; } //...... }} ** 解説 [#nc5d399e] * 解説 [#nc5d399e] 上記のサンプルでは、`0`列目にデフォルトの`TableCellEditor(JTextField)`、`1`列目に`JTextArea`を継承した`TableCellEditor`を設定しています。 - `TableCellEditor#isCellEditable` -- マウスのダブルクリックで編集開始 - `TableCellEditor#getTableCellEditorComponent` -- `JTextArea`に現在表示されているセル文字列をコピーし、戻り値の`Component`として、`JScrollPane`を返す - `TableCellEditor#isCellEditable`, `EventQueue.invokeLater` -- キー入力で編集開始した場合、その入力を`JTextArea`の文字列末尾に追加 - `TableCellEditor#getTableCellEditorComponent`, `EventQueue.invokeLater` -- `JTextArea`にフォースを移動し、`JTextArea`のキャレットも文字列末尾に移動 -- `JTextArea`にフォーカスを移動し、`JTextArea`のキャレットも文字列末尾に移動 ** 参考リンク [#wcd8d89d] * 参考リンク [#wcd8d89d] - [[TableCellEditorのレイアウトを変更>Swing/CellEditorLayout]] - [[JTableのセル幅で文字列を折り返し>Swing/TableCellRenderer]] ** コメント [#w195090b] * コメント [#w195090b] #comment #comment