JTable
編集可能なセルがあります。セルをクリックすると、編集モードになります。方向矢印を使用してセル内を移動しているときにも同じことが起こります。ここで、編集を開始する代わりにセルを選択し、Enterキーが押されたときにのみセルを編集したいと考えています。
その他の情報が必要な場合は、お尋ねください。
編集:Enterキーのアクション
class EnterAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
JTable tbl = (JTable) e.getSource();
tbl.editCellAt(tbl.getSelectedRow(), tbl.getSelectedColumn());
if (tbl.getEditorComponent() != null) {
tbl.getEditorComponent().requestFocus();
}
}
}
これは左矢印アクションのためのもので、残りの 3 つはこの 1 つから推測するのは難しくありません。
class LeftAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
JTable tbl = (JTable)e.getSource();
tbl.requestFocus();
tbl.changeSelection(tbl.getSelectedRow(), tbl.getSelectedColumn() > 0 ? tbl.getSelectedColumn()-1:tbl.getSelectedColumn(), false, false);
if(tbl.getCellEditor()!=null)
tbl.getCellEditor().stopCellEditing();
}
}
そして、これはこのアクションをバインドする方法です:
final String solve = "Solve";
KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(enter, solve);
table.getActionMap().put(solve, new EnterAction());
final String sel = "Sel";
KeyStroke arrow = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0);
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(arrow, sel);
table.getActionMap().put(sel, new LeftAction());
ああ、マウスクリックで編集する代わりにセルを選択するのをほとんど忘れていました:
public static MouseListener mAdapterTable = new MouseListener()
{
@Override
public void mousePressed(MouseEvent e)
{
JTable tbl=((JTable)e.getComponent());
if(tbl.isEditing())
{
tbl.getCellEditor().stopCellEditing();
}
}
@Override
public void mouseClicked(MouseEvent e) {
JTable tbl=((JTable)e.getComponent());
if(tbl.isEditing() )
tbl.getCellEditor().stopCellEditing();
}
@Override
public void mouseReleased(MouseEvent e) {
JTable tbl=((JTable)e.getComponent());
if(tbl.isEditing() )
tbl.getCellEditor().stopCellEditing();
}
};
次のEventListner
ようにテーブルに追加する必要があります。
table.addMouseListener(mAdapterTable);