JTableに複数セルの編集機能を提供したい:ダブルクリックは選択されたセルの値を編集する(標準的な動作)。右クリックするとポップアップが開く「選択されたセルを編集する」という項目を含むメニューを表示する。Swing JTableでのマルチセル選択
このメニューエントリにヒットすると、選択した範囲の最後のセルが編集可能になります。他の選択されたセルは選択されたままである。次に、新しい値を書き出し、編集が終了すると(通常はEnterキーを押す)、選択されたすべてのセルがこの値を取得します。
すべてのセルに同じ値型、たとえば整数が含まれているとします。
はここで始めるために、ポップアップダイアログを示したコードです:
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.setCellSelectionEnabled(true);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
doPop(e);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
doPop(e);
}
}
private void doPop(MouseEvent e) {
MultiEditPopUp menu = new MultiEditPopUp(tblRanges);
menu.show(e.getComponent(), e.getX(), e.getY());
}
});
class MultiEditPopUp extends JPopupMenu {
JMenuItem menuItem;
MultiEditPopUp(JTable table) {
menuItem = new JMenuItem("Edit selected");
menuItem.setAction(new BulkEditAction(table));
add(menuItem);
}
}
class BulkEditAction extends AbstractAction {
private final JTable table;
public BulkEditAction(JTable table) {
this.table = table;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
// TODO: let the user edit the last cell, and then apply to the others
}
}
私はそんなことをどのように行うことができますか?
正確に何が問題なのですか?編集した値を受け取ったら、それをすべての選択されたセルに伝播して幸せになれます:-) – kleopatra
コメントのカップル(私が得なかった問題に無関係;-))JSomethingをサブクラス化せず、代わりにJPopupMenu特定の項目を追加するためにサブクラス化する必要はありません)b)マウスコンテナの代わりにsetComponentPopupMenuを意味する最高の抽象概念を常に使用します(これは不完全な機能を提供しますが、 tキーボードでポップアップをカバーする) – kleopatra
問題は、選択を維持しながら、そのセルを編集する方法です。 サブクラス化のご提案ありがとうございます。 – espinchi