概要

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

サンプルコード

private final JTable table = new JTable(model);
private final Action copyAction = new AbstractAction("copy") {
  @Override public void actionPerformed(ActionEvent e) {
    e.setSource(table);
    table.getActionMap().get("copy").actionPerformed(e);
  }
};
view all

解説

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