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

Posted by at 2009-06-22

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

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

  • &jnlp;
  • &jar;
  • &zip;
SelectAllButton.png

サンプルコード

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);
  }
};
View in GitHub: Java, Kotlin

解説

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

コメント

  • タイトルの`typo`を修正 -- aterai
  • `Java Web Start`で起動した場合は、コピーできない? このサンプル内でコピーした文字列などを外部のアプリケーションにペーストすることはできない(逆も不可)? -- aterai