Frage

Was ich will, ist tun, wenn der Benutzer Finish Bearbeitung von Daten in Tabellenzelle Fokus auf eine andere Zelle in Abhängigkeit davon, welche Benutzer eingegeben zu bewegen, und die Zelle in den Bearbeitungsmodus zu drehen, so Benutzer sofort und ohne zusätzliche Aktion Eingabe beginnen. Auf diese Weise können Benutzer auf seine Arbeit konzentrieren und Software tun sollte das ‚Denken‘, um die Zelle neben bearbeitet werden.

Einfache Aufgabe, die nicht so einfach sieht im wirklichen Leben ... jemand eine Idee?

War es hilfreich?

Lösung

Bitte versuchen Sie dieses Beispiel.

Es sollte können Sie durch die Tabelle navigieren, indem Sie die Eingabe von Werten u, d, l, r für oben, unten, links, rechts.

Ich hoffe, dass dies wird Ihnen eine Vorstellung davon, wie es zu tun.

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

Andere Tipps

Sie sollten eine KeyListener zum JTable fügen Sie alle eingegebenen Zeichen zu erhalten. Nachdem der Benutzer drückt Enter , sollten Sie das Wort prüfen der Benutzer eingegeben hat.

Schreiben Sie Ihre eigene FocusTraversalPolicy es auf die Tabelle zu setzen

table.setFocusTraversalPolicy(policy)

Die FocusTraversalPolicy beschreibt, welche Komponente den nächsten Fokus erhält. Danach können Sie anrufen

FocusManager.getCurrentManager().focusNextComponent();

EDIT:. Ich habe das nicht testen, es ist nur eine Idee

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top