JSpinner & KeyListener

javasdann

Grünschnabel
Hallo,

ich habe einen JSpinner mit DateEditor.
Ich schaffe es einfach nicht einen KeyListener dran zu hängen :-(

Die Eingaben würde ich gerne bei ENTER abfangen um sie zu bearbeiten.

Code:
	SpinnerDateModel model = new SpinnerDateModel();		
	JSpinner dateSpinner = new JSpinner(model); 
	JSpinner.DateEditor editor = new JSpinner.DateEditor(dateSpinner, "dd.MM.yyyy"); 
	dateSpinner.setEditor(editor); 
	eingabepanel.add(dateSpinner);

Als Beispiel möchte ich daß eine manuelle Eingabe 010405 in 01.04.2005 geändert wird.

Gruß, Roger
 
Hier mal ein Beispielcode:


Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class test
extends JFrame
//implements WindowListener
{ 

  public static void main(String[] s) {
	JFrame frame = new JFrame("Test");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	KeyListener listener = new KeyListener() {
	  public void keyPressed(KeyEvent e) {
		System.out.println("1");
	  }
 
	  public void keyReleased(KeyEvent e) {
		System.out.println("2");
	  }
 
	  public void keyTyped(KeyEvent e) {
		System.out.println("3");
	  }
	};

	SpinnerDateModel model = new SpinnerDateModel();	   
	JSpinner dateSpinner = new JSpinner(model);
	JSpinner.DateEditor editor = new JSpinner.DateEditor(dateSpinner, "dd.MM.yyyy");
	dateSpinner.setEditor(editor);
	
	//dateSpinner.addKeyListener(listener);  - es passiert nix!
	//editor.addKeyListener(listener);  - es passiert nix!
	//model.addKeyListener(listener); - hat diese methode nicht
	
	frame.getContentPane().add(dateSpinner);

	frame.pack();
	frame.setVisible(true);
  }

}
 
Tach,
leider nein. Ich habe mir das auch schon angeschaut, bekomme das Problem aber auch nicht in den Griff, k.A. warum. Abhilfe ist evtl. nur das Unterbinden der Tastatureingabe - also so, dass nur der Spinner genutzt werden kann - oder die Verwendung einer anderen Componente. Davon gibt es ein paar nette vorgefertigte.
 
Hallo,

wenn du dennoch den JSpinner verwenden möchtest, bietet er die Schnittstelle setEditor(JComponent).

Diese JComponent enspricht dem Eingabefeld des JSpinners. Wenn man sich die Implementierung ansieht, wird man feststellen, dass hier ein JPanel ein JTextField kapselt.
Das ist der Grund, warum man nicht an die Events kommt.

Nun kannst du hingehen und den Editor austauschen - zum Beispiel gegen eine Klasse, die von JTextField ableitet. Dort kannst du dann nach herzenslust die Events abfangen etc.

Viele Grüße
Sebastian
 
Zuletzt bearbeitet von einem Moderator:
Da muss man noch eine Ebene tiefer gehen:

Code:
JTextField t = ((JSpinner.DefaultEditor) this.getEditor()).getTextField();
t.addKeyListener(wtf);

Dom
 
Zurück