KeyListener seit 1.4.x fehlerhaft

Status
Nicht offen für weitere Antworten.
R

Reeny

Gast
Hi,

ich habe schon einige Beiträge zu diesem Thema gefunden, aber keine davon gibt mir die Lösung, die ich brauche :/

Und zwar habe ich ein Programm (zu umfangreich, um es reinzustellen ...), das ein JFrame mit einigen Components enthält. Der JFrame soll einen KeyListener bekommen der auf Alt+Pfeiltaste reagieren soll, egal welche Komponente gerade den Focus hat. Das ging bis jetzt auch, wenn ich mit Java Version 1.3 compiliert habe. Aber wenn ich es mit Version 1.4 compiliere, reagiert der Listener nicht mehr, wenn der Focus auf einem Button oder Textfeld sitzt.

Also was tun? Ich kann ja nicht alle Components mit diesem KeyListener ausstatten, der auf Alt+Pfeiltaste hört. Und ich will unbedingt unter 1.4 compilieren!!!

In der API und sonst hab ich nichts dazu gefunden, also wenn ihr da eine Idee habt, HELFT MIR! ;)

Reeny
 
B

Beni

Gast
"Fehlerhaft" ist ein starkes Wort. Nur weil es jetzt eine leicht andere Implementation ist, der man sich anpassen muss, sollte man nicht von "fehlerhaft" sprechen.

Reeny hat gesagt.:
Also was tun? Ich kann ja nicht alle Components mit diesem KeyListener ausstatten, der auf Alt+Pfeiltaste hört.

Wieso nicht? Mit Hilfe eines ContainerListeners kann man das automatisieren. In einem Progi hab ich folgendes für einen MouseListener verwendet, das sollte auch mit einem KeyListener gehen (dieser Listener muss ganz am Anfang einer "Parent-Component" hinzugefügt werden, damit er auch immer reagieren kann, wenn eine Component dazu kommt.):

Code:
	protected class IPFocusListener implements 
			ContainerListener, MouseListener{
		private boolean pressed;
		private boolean sending = false;
		
		/** Defaultkonstruktor */
		public IPFocusListener(){
		}
		
		public void componentAdded(ContainerEvent e) {
			add ( e.getChild() );
		}

		public void componentRemoved(ContainerEvent e) {
			remove ( e.getChild() );
		}

		private void send( MouseEvent e ){
			Component src = (Component)e.getSource();
			
			if( src.getMouseListeners().length == 1 ){
				try{
					Component parent = src;
					//src.removeMouseListener( this );
					sending = true;
				
					while( !e.isConsumed() && parent != null && parent != InteractivePanel.this ){
// Abbruch, falls die "Parent-Component" InteractivePanel.this erreicht wird.
						parent.dispatchEvent( e );
						e.translatePoint( parent.getX(), parent.getY() );
						parent = parent.getParent();
					}
				}
				finally{
					//src.addMouseListener( this );
					sending = false;
				}
			}
			
		}
		
		public void mousePressed(MouseEvent e) {
			if( sending )
				return;
			
			Component src = (Component)e.getSource();
			MouseEvent translate = SwingUtilities.convertMouseEvent( src, 
					e, InteractivePanel.this);
			
			send( e );
			
			// zuerst wird der Visualicer an dieser Stelle gesucht.
			pressed = true;
			
			Point mouse = translate.getPoint();
				

		}
		
		public void mouseReleased ( MouseEvent e ){
			if( sending )
				return;
			
			if ( pressed ){
				pressed = false;
				[...] // damit arbeiten...
			}
			
			send( e );
		}		
		
		public void mouseClicked(MouseEvent e) {
			if( !sending )
				send( e ); 
		}
		public void mouseEntered(MouseEvent e) {
			if( !sending )
				send( e );
		}
		public void mouseExited(MouseEvent e) {
			if( !sending )
				send( e );
		}
		
		private void add ( Component c ){	
			c.addMouseListener( this );
			
			if ( c instanceof Container ){
				Container cont = (Container)c;
				cont.addContainerListener( this );
				
				for ( int i = 0, n = cont.getComponentCount(); i < n; i++ )
					add ( cont.getComponent( i ) );
			}
		}
		private void remove ( Component c ){
			c.removeMouseListener( this );
			
			if ( c instanceof Container ){
				Container cont = (Container)c;
				cont.removeContainerListener( this );
				
				for ( int i = 0, n = cont.getComponentCount(); i < n; i++ )
					remove ( cont.getComponent( i ) );
			}
		}
	}
 
R

Reeny

Gast
Noch eine Nebenfrage dazu:

Die Funktion setNextFocusableComponent() für Component ist ja nun deprecated. Heißt das, dass diese Funktion ab Version 1.5 unbrauchbar ist?
Oder wie lange gilt die noch?
 
B

Beni

Gast
Sie ist nicht unbrauchbar, nur nicht "guter Stil". Bin gerade zu faul um in der API nachzuschlagen, aber die Methode wurde wohl durch eine bessere Alternative ersetzt.
 
R

Reeny

Gast
Leider nicht so richtig. Man muss, so wie ich es verstanden habe, eine FocusTraversalPolicy benutzen. Leider sind die gegebenen Policies nicht ganz passend zu meinen Wünschen, also so, dass ich die Reihenfolge der Components im FokusZyklus (FocusCycle) beliebig ändern kann. Muss deswegen eine eigene programmieren (ausgehend von der ContainerOrderFocusTraversalPolicy). Dachte nur, dass es auch einfacher ginge ohne gleich ne neue Klasse zu proggn :)
Ich will es immer schön einfach haben ;)

Und danke für den Bsp-Code. Das kann ich für mein Programm gebrauchen!
 

Niki

Top Contributor
Du kannst auch versuchen das ganze über die KeyStrokes und die InputMap bzw ActionMap...

Code:
    JComponent jc = (JComponent)getContentPane();
    InputMap im = ic.getInputMap(JComponent.WHEN_IN_FOCUS.....);
    ActionMap am = ac.getActionMap();
    
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_?, KeyEvent.ALT_MASK), "IDENTIFIER");
    am.put("IDENTIFIER", new AbstractAction(){
        public void actionPerformed(ActionEvent e){
            //tu irgendwas
        }
    });

meistens funktioniertds bei mir, ich glaub, wenn du in einer Komponente jedoch einen ActionListener hast, musst du dort das selbe machen
 
R

Reeny

Gast
Danke, Niki :)

Probier ich auch gerade aus ... Dazu hab ich aber auch noch Frage, die ich in einen anderen Post gestellt habe (weil deine Antwort hier erst danach gelesen :roll: ).

Reeny
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben