• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableを別コンポーネントから操作
#navi(../)
#tags(JTable, ActionMap)
RIGHT:Posted by &author(aterai); at 2009-06-22
* JTableを別コンポーネントから操作 [#n293e0f8]
``JTable``の全選択や選択された行のコピーを``JButton``などの別コンポーネントから行います。
---
category: swing
folder: SelectAllButton
title: JTableを別コンポーネントから操作
tags: [JTable, ActionMap]
author: aterai
pubdate: 2009-06-22T11:18:08+09:00
description: JTableの全選択や選択された行のコピーをJButtonなどの別コンポーネントから行います。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTSx9pjE3I/AAAAAAAAAjU/kU0UU-PWKSI/s800/SelectAllButton.png
---
* 概要 [#summary]
`JTable`の全選択や選択された行のコピーを`JButton`などの別コンポーネントから行います。

- &jnlp;
- &jar;
- &zip;
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTSx9pjE3I/AAAAAAAAAjU/kU0UU-PWKSI/s800/SelectAllButton.png)

#ref(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTSx9pjE3I/AAAAAAAAAjU/kU0UU-PWKSI/s800/SelectAllButton.png)

** サンプルコード [#nde13b8a]
* サンプルコード [#sourcecode]
#code(link){{
private final JTable table = new JTable(model);
private final Action copyAction = new AbstractAction("copy") {
  public void actionPerformed(ActionEvent e) {
  @Override public void actionPerformed(ActionEvent e) {
    e.setSource(table);
    table.getActionMap().get("copy").actionPerformed(e);
  }
};
}}

** 解説 [#k11a8ec9]
上記のサンプルでは、``JButton``や``JMenuItem``がクリックされたときに、以下のようにしてフォーカスのない``JTable``の全選択やコピーを行っています。
* 解説 [#explanation]
上記のサンプルでは、`JButton`や`JMenuItem`がクリックされたときに以下のようにしてフォーカスのない`JTable`の全選択とコピーを行っています。

- ``AWTEvent#setSource(Object)``メソッドでイベントを``JTable``に再転送
--``Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JMenuItem cannot be cast to javax.swing.JTabl``などの例外が発生しないように
- ``JTable``から``ActionMap``を取得
- ``ActionMap``から``Action``を取得
-- これらの``Action``は``JTable``でコピー(KBD{Ctrl+C})するのと同様
- ``ActionListener#actionPerformed(ActionEvent)``メソッドで``Action``を実行
- `AWTEvent#setSource(Object)`メソッドでイベントを`JTable`に再転送
--`Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JMenuItem cannot be cast to javax.swing.JTable`などの例外が発生しないようにするために再転送が必要
- `JTable`から`ActionMap`を取得
- `ActionMap`から`Action`を取得
-- これらの`Action`は`JTable`にフォーカスが存在する状態でのコピー(KBD{Ctrl+C})と同一
- `ActionListener#actionPerformed(ActionEvent)`メソッドで`Action`を実行

//**参考リンク
** コメント [#r838c370]
- タイトルの``typo``を修正 -- [[aterai]] &new{2009-06-23 (火) 18:34:44};
- ``Java Web Start``で起動した場合は、 %%コピーできない?%% このサンプル内でコピーした文字列などを外部のアプリケーションにペーストすることはできない(逆も不可)? -- [[aterai]] &new{2009-10-02 (金) 19:05:43};
* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/ActionMap.html ActionMap (Java Platform SE 8)]

* コメント [#comment]
#comment
- タイトルの`typo`を修正 -- &user(aterai); &new{2009-06-23 (火) 18:34:44};
- `Java Web Start`で起動した場合は、 %%コピーできない?%% このサンプル内でコピーした文字列などを外部のアプリケーションにペーストすることはできない(逆も不可)? -- &user(aterai); &new{2009-10-02 (金) 19:05:43};

#comment