Pergunta

O que eu quero fazer é quando acabamento utilizador edição de dados na célula da tabela para mover o foco para outra célula, dependendo do que o usuário entrou, e para transformar a célula em modo de edição assim que o usuário pode começar a digitar imediatamente com nenhuma ação adicional. Este usuário maneira pode se concentrar em seu trabalho e software fará o 'pensamento' sobre qual célula deve ser editado no próximo.

tarefa simples que não parece tão simples na vida real ... Alguém alguma idéia?

Foi útil?

Solução

Por favor, tente este exemplo.

Deve permitem navegar através da tabela inserindo os valores u, d, l, r para cima, baixo, esquerda, direita.

A esperança de que isso vai lhe dar uma idéia sobre como fazê-lo.

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class Test extends JFrame {

    private JTable table;
    private TableModel tableModel;

    public Test() {
        tableModel = new DefaultTableModel(5, 5);

        table = new JTable(tableModel);
        table.setColumnSelectionAllowed(true);

        getContentPane().add(table);

        Action handleEnter = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                table.getCellEditor().stopCellEditing(); // store user input
                int row = table.getSelectedRow();
                int col = table.getSelectedColumn();
                String val = String.valueOf(table.getValueAt(row, col)).toLowerCase();
                if (val.equals("u"))
                    --row;
                else if (val.equals("d"))
                    ++row;
                else if (val.equals("l"))
                    --col;
                else if (val.equals("r"))
                    ++col;
                if (     row >= 0 && row < tableModel.getRowCount()
                      && col >= 0 && col < tableModel.getColumnCount()) {
                    table.changeSelection(row, col, false, false);
                    table.editCellAt(row, col);
                }
            }
        };
        // replace action for ENTER, since next row would be selected automatically
        table.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "handleEnter");
        table.getActionMap().put("handleEnter", handleEnter);
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.setSize(800, 600);
        test.setVisible(true);
    }
}

Outras dicas

Você deve adicionar um KeyListener ao JTable para obter todos Caracteres digitados. Depois que o usuário pressiona Enter , você deve verificar a palavra que o usuário digitou.

Escreva a sua própria FocusTraversalPolicy configurá-lo para a tabela

table.setFocusTraversalPolicy(policy)

O FocusTraversalPolicy descreve qual componente recebe o próximo foco. Após isso, você pode chamar

FocusManager.getCurrentManager().focusNextComponent();

EDIT:. Eu não testei isso, é apenas uma idéia

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top