概要
JTable
の全選択や選択された行のコピーをJButton
などの別コンポーネントから行います。
Screenshot
Advertisement
サンプルコード
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 in GitHub: Java, Kotlin解説
上記のサンプルでは、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
を実行