Zmień zachowanie kluczowych akcji JTable

mamJTable z edytowalnymi komórkami. Po kliknięciu komórki przechodzi do trybu edycji; to samo dzieje się, gdy przemieszczam się przez komórkę za pomocą strzałek kierunkowych. Teraz chcę wybrać komórkę zamiast rozpocząć edycję i edytować komórkę tylko wtedy, gdyWchodzić klawisz jest wciśnięty.

Jeśli potrzebujesz innych informacji, poproś o nie.

Edytuj: Akcja dlaWchodzić klawisz

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();
        }
    }
}

Teraz jest to dla akcji ze strzałką w lewo, a reszta 3 nie jest trudna do wywnioskowania z tego:

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();
    }
}

W ten sposób łączysz te działania:

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());

Och, prawie zapomniałem, aby wybrać komórkę zamiast edytować w Mysz:

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();
    }
};

TheEventListner należy dodać do tabeli w ten sposób:

table.addMouseListener(mAdapterTable);

questionAnswers(2)

yourAnswerToTheQuestion