TITLE:JTableを別コンポーネントから操作

Posted by terai at 2009-06-22

JTableを別コンポーネントから操作

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

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

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);
  }
};

解説

上記のサンプルでは、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を実行

コメント

  • タイトルのtypoを修正 -- terai