Interne "Enterfunktion" bei JTable abschalten

Y

YelloW_22

anscheinend gibts ne interne Funktion der JTable die, wenn man Enter drückt, die Selektion der Tabelle um eins nach unten setzt.
Wie kann ich das ausschalten?
Hab schon versucht die selektion dann manuell wieder hoch zu setzten, geht zwar, aber is halt optisch ganz doof weil sie erst nach unten un dann nach oben springt.

lg YelloW
 
Howdie.

Witzig, habe praktisch die identische Antwort grad in einem anderen Thread gepostet:
Hast du schon versucht, einen KeyListener hinzuzufügen, und die Enter-Eingabe per KeyEvent#consume() zu unterbinden?

Gruß
miffi
 
Problem ist: Hab schon nen Lauscher drauf, der ENTER abbprüft. Denn ENTER soll bei mir was anderes machen, nämlich den grad durch die Maus selektierten Satz anzeigen.
 
Das macht eigentlich relativ wenig aus.
Java:
public void KeyReleased(KeyEvent e){
   switch(e.getKeyCode()){
      case KeyEvent.VK_ENTER:
          e.consume();          

          // dein code hier

          break;
   }
}

Allerdings weiß ich nicht, ob JTable standardmäßig bereits einen eigenen KeyListener implementiert, der auf bestimmte Standard-Keys für Tabellen (F2, Enter, Ctrl+c, etc.) lauscht. Einfach mal testen.

Gruß
miffi
 
das bringt leider absolut null. Enter bewirkt weiterhin das versetzen der Selection.
Mein code jetzt:


else if(arg0.getKeyCode() == KeyEvent.VK_ENTER)
{
switch(arg0.getKeyCode())
{
case KeyEvent.VK_ENTER:
arg0.consume();

Operationen.Bearbeiten(h);

break;
}

}
 
Also erstmal:
Du hast in deinem Code jetzt doppelt gemoppelt - du prüfst jetzt den KeyCode sowohl mit deiner if-else-Kaskade als auch dem switch aus meinem Beispiel. Ich würde mich auf den switch beschränken, ist die schnellste Methode.

@Topic:
Hab grad was zu dem Thema gelesen.
One has to install a disabled action for the KeyStroke in question. There is no way to remove KeyStrokes directly that a parent input map handles.
disabled = new AbstractAction()
{
public boolean isEnabled() { return false; }
public void actionPerformed(ActionEvent e) { }
};
// ....
table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(...), "none");
table.getActionMap().put("none", disabled);

Strictly speaking, one should also install this in the WHEN_FOCUSED input map.
Note that if an editor component has focus, it will also possibly handle the key stroke.
Es scheint also eher ein kompliziertes Vorgehen zu sein, was du da anschlägst. Das Stichwort lautet wohl, eine eigene Input-Map zu erstellen, bzw. die entsprechenden Werte in der vorhandenen zu überschreiben.
Wenn es über die üblichen Swing-Verfahren nicht lösbar ist, weiß ich leider auch nicht weiter.

Gruß und viel Erfolg
miffi
 
Hallo,

schau mal hier:
Java:
package de.tutorials.training;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class JTableDisableCellChangeAfterEnter extends JFrame {

  JTable table;


  public JTableDisableCellChangeAfterEnter() {
    super("JTableClipboardExample");
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    Object[][] rowData = new Object[][] { { "a1", "b1", "c1" }, { "a2", "b2", "c2" }, { "a3", "b3", "c3" } };
    Object[] columnNames = new Object[] { "a", "b", "c" };
    table = new JTable(new DefaultTableModel(rowData, columnNames));
    table.setSurrendersFocusOnKeystroke(true);
    add(new JScrollPane(table), BorderLayout.CENTER);
    pack();
    setVisible(true);
  }


  public static void main(String[] args) {
    new JTableDisableCellChangeAfterEnter();
  }
}

Gruß Tom
 
Zurück