TITLE:JTableの行全選択とコピー
Posted by terai at 2009-06-22

JTableの行全選択とコピー

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

概要

JTableの全選択や選択された行のコピーをJButtonなどの別コンポーネントから行います。

#screenshot

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
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);
  }
};

解説

上記のサンプルでは、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を取得
  • ActionListener#actionPerformed(ActionEvent)メソッドでActionを実行

解説

上記のサンプルでは、JButtonJMenuItemがクリックされたときに以下のようにしてフォーカスのない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を取得
    • これらのActionJTableにフォーカスが存在する状態でのコピー(Ctrl+C)と同一
  • ActionListener#actionPerformed(ActionEvent)メソッドでActionを実行

参考リンク

コメント