TITLE:JTableを別コンポーネントから操作
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2009-06-22
*JTableを別コンポーネントから操作 [#n293e0f8]
JTableの全選択や選択された行のコピーをJButtonなどの別コンポーネントから行います。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTSx9pjE3I/AAAAAAAAAjU/kU0UU-PWKSI/s800/SelectAllButton.png)

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

**解説 [#k11a8ec9]
上記のサンプルでは、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.JTable」などの例外が発生しないように
-JTableからActionMapを取得
-ActionMapからActionを取得
--これらのActionはJTableでコピー(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};

#comment