Ich denke, dass die JTable-Komponente eine bessere Arbeit der Filterung der Schlüssel, die Bearbeitung beginnen würde. Ich meine, mit der aktuellen Implementierung, wenn Sie DEL, Strg + Umschalt + Entf, F5, F7, zum Beispiel, in einer bearbeitbaren Zelle eingeben, wird der Zelleneditor angezeigt. Meiner Meinung nach kann ein Zelleneditor mit solchen Schlüsseln für den Endanwender nicht intuitiv sein.Starten Sie die Bearbeitung in einer JTable-Zelle nur mit vernünftigen Schlüsseln
Es gibt noch ein weiteres Problem: JTable ist sich der anderen möglichen Tastenbelegungen, die im Formular definiert sind, nicht bewusst. Wenn Sie eine Tastenkombination Strg + Umschalt + C für eine Schaltfläche in Ihrem Formular definiert haben, wenn Sie diese Tastenkombination in Ihre JTable eingeben, wird die Tabelle mit der Bearbeitung beginnen und die Schaltfläche Tastenaktion wird als nächstes aufgerufen. Ich denke, dass es eine einfache Möglichkeit geben sollte, dies zu verhindern, anstatt alle bereits definierten Tastenbindungen in der Tabellenschlüssel-Bindungszuordnung zu deaktivieren.
Gibt es eine Komponente von Drittanbietern, die zumindest teilweise einige dieser Probleme gelöst hat, insbesondere die, die mit einem vernünftigen Schlüssel zu bearbeiten begonnen hat? Ich möchte nicht all das langwierige Filtern selbst machen.
Jede Hilfe wäre willkommen. Vielen Dank.
Marcos
UPDATE
Zur Zeit benutze ich diese höchst unvollkommen „Lösung“, dass zumindest die Dinge weniger macht im Moment schlimmer. Verbesserungen, Kommentare und Vorschläge werden geschätzt.
@Override
public boolean isCellEditable(EventObject e)
{
if (e instanceof MouseEvent)
{
return ((MouseEvent) e).getClickCount() >=
_delegate.getMouseClickCountToStartEditing();
}
else if (e instanceof KeyEvent)
{
KeyEvent event = (KeyEvent) e;
int key = event.getKeyCode();
if ((key >= KeyEvent.VK_F1 && key <= KeyEvent.VK_F12) &&
KeyStroke.getKeyStrokeForEvent(event) != _startEditingKey)
{
return false;
}
int ctrlAlt = KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK;
if ((event.getModifiersEx() & ctrlAlt) == ctrlAlt)
{
return true;
}
if ((event.getModifiersEx() & ctrlAlt) != 0)
{
return false;
}
return true;
}
else
{
// Is this else really needed? Are there other events types
// other than mouse and key events?
return true;
}
}
// _startEditingKey is obtained with this method
private KeyStroke getStartEditingKey()
{
InputMap bindings = TheTable.this.getInputMap(
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
for (KeyStroke key : bindings.allKeys())
{
Object binding = bindings.get(key);
if ("startEditing".equals(binding))
{
return KeyStroke.getKeyStroke(
key.getKeyCode(), key.getModifiers(), true);
}
}
return null;
}
Bitte bearbeiten Sie Ihre Frage, um eine [sscce] (http://sscce.org/), die das spezifische Problem zeigt, die Sie haben. – trashgod
Entschuldigung. Ich denke, dass ein scsce in diesem Fall unnötig ist. Das Problem ist in meinem Text bereits gut beschrieben. – Marcos