KeyEvent bei JTable mehrmals hintereinander ausführen

Status
Nicht offen für weitere Antworten.

julchen81

Bekanntes Mitglied
Hallo,

ich habe ein JFrame mit einem JTable erstellt.
Mit Strg+D und Strg+L kann ich eine Zeile löschen bzw. neu einfügen.

Wenn ich jetzt mehrmals hintereinander diese Tastenkombinationen drücke, reagiert meine JTable nur beim ersten Mal.
Um erneut die Tastenkombi ausführen zu können, muss ich extra noch mal in die Tabelle klicken, obwohl eigentlich auch nach dem ersten Drücken von Strg+D/L die aktuelle Zeile markiert ist.

Hier beispielsweise ein Teilstück des Codes der Klasse AddLine, die KeyListener implementiert:
Code:
public void keyPressed(KeyEvent e) {
		int row = gui.table.getSelectedRow();

		if ((e.isControlDown()) && (e.getKeyCode() == KeyEvent.VK_L)) {
				for (int i = 99; i > row; i--) {
					for (int j = 0; j < 4; j++) {
						gui.al.dataMiddle[i][j] = gui.al.dataMiddle[i-1][j];
					}
				}
				
				gui.al.dataMiddle[row][0] = null;
				gui.al.dataMiddle[row][1] = null;
				gui.al.dataMiddle[row][2] = null;
				gui.al.dataMiddle[row][3] = null;
				
				
				gui.table = new JTable(gui.al.dataMiddle, gui.columnNames);
				gui.table.setColumnModel(gui.colModel);
				gui.table.addKeyListener(new AddLine(gui));
				gui.table.addKeyListener(new DeleteLine(gui));
				gui.table.getSelectionModel().setSelectionInterval(row, row);
				gui.sp.getViewport().add(gui.table);
			}
...............

Was ist da faul??
Die Tabelle, die ich noch mal erzeuge, besitzt doch nach wie vor die KeyListener... und es funktioniert ja auch ein erneutes Ausführen des Befehles, nur eben erst dann, wenn ich erneute in die Tabelle klicke :x

Ich hatte mehr oder weniger diese Frage schon in's Forum gestellt, aber damals hatte ich gedacht, mein Fehler liegt bei der falschen Markierung... aber das glaube ich mittlerweile nicht mehr. Deshalb hab ich's jetzt neu formuliert.

Wäre echt um Hilfe dankbar!!

Liebe Grüße,
Julia
 
M

MiDniGG

Gast
hab ned alles genau gelesen. aber versuch ma sowas wie table.setfocus(); oder irgendwas in die Focus-Richtung eben...
 

julchen81

Bekanntes Mitglied
es gibt eine Methode setFocusable(boolean bool);

aber ob ich jetzt true oder false übergebe, das Ergebnis ist das Gleiche: ich kann nach wie vor nur einmal eine Tastenkombination benutzen :cry:
 
M

MiDniGG

Gast
nee irgendwas mit requestFocus und das nachdem du den keyevent ausgeführt hast, damit die Table wieder den Fokus besitzt... Weiß aba ned ob es geht!
 
M

MiDniGG

Gast
Ja also so sollte es gehen:

Code:
public void keyPressed(KeyEvent e) {
      int row = gui.table.getSelectedRow(); 

      if ((e.isControlDown()) && (e.getKeyCode() == KeyEvent.VK_L)) { 
            for (int i = 99; i > row; i--) { 
               for (int j = 0; j < 4; j++) { 
                  gui.al.dataMiddle[i][j] = gui.al.dataMiddle[i-1][j]; 
               }
            }
             
            gui.al.dataMiddle[row][0] = null; 
            gui.al.dataMiddle[row][1] = null; 
            gui.al.dataMiddle[row][2] = null; 
            gui.al.dataMiddle[row][3] = null; 
             
             
            gui.table = new JTable(gui.al.dataMiddle, gui.columnNames); 
            gui.table.setColumnModel(gui.colModel); 
            gui.table.addKeyListener(new AddLine(gui)); 
            gui.table.addKeyListener(new DeleteLine(gui)); 
            gui.table.getSelectionModel().setSelectionInterval(row, row); 
            gui.sp.getViewport().add(gui.table); 
         }
...............
gui.table.requestFocus();
}

So wird dann nachdem alles von KeyPressed ausgeführt wurde der Focus auf die Tabelle gesetzt und somit is diese bereit für einen weiteren STRG+L zugriff oder was auch immer ^^
 
B

Beni

Gast
Du erzeugst also jedesmal eine neue Tabelle, wenn du eine neue Linie in der Tabelle benötigst? Das ist kein sehr guter Weg... informiere dich mal was das TableModel ist (z.B. in unserer FAQ), und wie man es benutzen kann (z.B. um neue Zeilen effizient in eine Tabelle zu bringen). :wink:
 
M

MiDniGG

Gast
Ach lol des hab ich ja mal gar nicht beachtet... :oops: ich sollte echt besser hinschaun...
 

julchen81

Bekanntes Mitglied
Eine heiße Spur!!

Jetzt funktioniert fast alles, und zwar folgendermaßen:
Code:
public void keyPressed(KeyEvent e) {
		int row = gui.table.getSelectedRow();
			if ((e.isControlDown()) && (e.getKeyCode() == KeyEvent.VK_L)) {

				for (int i = 99; i > row; i--) {
					for (int j = 0; j < 4; j++) {
						gui.al.dataMiddle[i][j] = gui.al.dataMiddle[i-1][j];
					}
				}
				//Die neue Zeile der Tabelle ist leer
				gui.al.dataMiddle[row][0] = null;
				gui.al.dataMiddle[row][1] = null;
				gui.al.dataMiddle[row][2] = null;
				gui.al.dataMiddle[row][3] = null;
				
				DefaultTableModel model = new DefaultTableModel(gui.al.dataMiddle, gui.columnNames);
				//model.insertRow(row, emptyRow);
				gui.table.setModel(model);
				gui.table.setColumnModel(gui.colModel);
				gui.table.changeSelection(row, 0, false, false);
			}
.....

Was jetzt nach wie vor nicht funktioniert: Meine Spaltenbreiten, die ich im colModel festgelegt hab, werden nach Strg+L ignoriert!! Aber ich setze doch wieder dieses colModel: gui.table.setColumnModel(gui.colModel);

Jemand eine Idee, wie man das noch eliminieren könnte ?? ???:L


Ich hatte es auch mit model.insertRow(row, new Object[] {null, null, null, null}) probiert (und dafür meine for-Schleife weggelassen sowie mir erspart, die einzelnen Einträge auf null zu setzten (gui.al.dataMiddle[row][0] = null;...) ) aber das haut nicht hin!
Wenn ich die for-Schleife weglasse, kann ich die Tastenkombi wieder nur 1x ausführen.
Mach ich's dann zumindest mit der for-Schleife (aber nach wie vor ohne gui.al.dataMiddle[row][0] = null;...) wird nicht unbedingt eine neue Zeile eingefügt, sondern lediglich der Inhalt nach unten verschoben und zwar so weit, bis eine leere Zeile auftaucht. Ist diese Zeile dann inmitten der Tabelle, werden die darunterliegenden Einträge nicht nach unten vershoben, sondern diese leere Zeile wird mit den darüberliegenden Einträgen gefüllt. Die leere Zeile ist also dann nicht mehr da.

Julia
 

julchen81

Bekanntes Mitglied
Jetzt hab ich's - musste einen anderen Konstruktor für die allererste JTable verwenden; einen Konstruktor, dem ich dann TableModel und TableColumnModel übergebe.

Bin ich froh. DAAAAAANNNNKKKKEEE!!!!!

Schönen Tag noch, :wink:
Julia
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX JFoenix TextField KeyEvent AWT, Swing, JavaFX & SWT 2
L JavaFX ASCII Zeichen /char von KeyEvent erhalten AWT, Swing, JavaFX & SWT 5
Wurstkopp JavaFX JavaFX KeyEvent kein Zahlencode um unbekannte Mediatasten auszuwerten? AWT, Swing, JavaFX & SWT 0
B JavaFX Wo liegt mein Gedankenfehler ??? KeyEvent geht nicht ... AWT, Swing, JavaFX & SWT 8
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
dat_vin KeyEvent jTextField AWT, Swing, JavaFX & SWT 12
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
B Event Handling KeyEvent für "+"-Tase auf dem Numpad? AWT, Swing, JavaFX & SWT 2
R Integer to KeyEvent AWT, Swing, JavaFX & SWT 2
sylo STRG + TAB KeyEvent abfangen AWT, Swing, JavaFX & SWT 6
earlgrey_tea KeyEvent reagiert nicht auf Eingabe ("Pausentaste") AWT, Swing, JavaFX & SWT 11
Luk10 KeyEvent ... AWT, Swing, JavaFX & SWT 6
M KeyEvent, KEY_TYPED & backspace/left/right. AWT, Swing, JavaFX & SWT 3
H KeyEvent für JFrame AWT, Swing, JavaFX & SWT 3
S Spezielles KeyEvent AWT, Swing, JavaFX & SWT 6
Luma AWTEventListener KeyEvent und KEY_TYPED AWT, Swing, JavaFX & SWT 5
P KeyEvent methode an actionEvent methode weiterleiten AWT, Swing, JavaFX & SWT 5
A KeyEvent bei TAB-Druck AWT, Swing, JavaFX & SWT 10
J KeyEvent STRG+l, CTRL_DOWN_MASK AWT, Swing, JavaFX & SWT 7
I Pfeiltasten für KeyEvent AWT, Swing, JavaFX & SWT 4
G Windows Taste in KeyEvent? AWT, Swing, JavaFX & SWT 4
M KeyEvent - Programm mit ESC beenden AWT, Swing, JavaFX & SWT 7
H KeyEvent Leerzeichen und Backspace funktioren nicht! HILFE! AWT, Swing, JavaFX & SWT 2
S KeyEvent im JPanel AWT, Swing, JavaFX & SWT 3
G KeyEvent - Probleme AWT, Swing, JavaFX & SWT 6
G Suche einen KeyEvent für die Taste "ä" AWT, Swing, JavaFX & SWT 7
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben