Swing Seltsames ActionListener-Verhalten

Plastikeimer

Mitglied
Huhu,
ich fasse mich kurz:

ich habe eine Combobox gebaut, die hat einen ActionListener und einen KeyListener.

wenn ich im KeyListener die Methode "cb.getItemAt(2);" der Combobox aufrufe, wird keine Aktion ausgelöst, d.h. der ActionListener der Combobox macht nichts.

Wenn ich die selbe Methode 2 mal aufrufe, nichts.
Wenn ich die selbe Methode 4 mal aufrufe, tut der ActionListener auf einmal was !

Ich will eigentlich nicht, dass der ActionListener etwas macht, wenn ich etwas über den KeyListener mache !

Habt ihr vielleicht eine Idee wie ich den ActionListener quasi unempfänglich für die Signale des KeyListeners machen könnte ?
Über e.getSource geht es nicht, da ist es immer die Combobox!

LG
Plastikeimer
 
oder auch
new Error().printStrackTrace() in den Listener schreiben und den StackTrace zum ungewünschten Ereignis posten,
welche Tastatureingaben sind es eigentlich? ein Enter wäre schon was anderes als ein kleines 'k'..
 
Ich möchte mit dem KeyListener das Auswählen eines Items unterstützen,
indem Items gelöscht werden, die nicht mit der eingetippten buchstabensequenz anfangen.
das habe ich aber alles mal auskommentiert, auch nur die drei aufrufe von cb.getItemAt(i)
lösen schon das ActionEvent aus !


Java:
@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub
				//cb.setKeySelectionManager(null);
				//cb.setFocusTraversalKeysEnabled(false);
				 
				buffer=buffer+e.getKeyChar();
				    //	for(int i=0; i<cb.getItemCount(); i++){
				    // 	String str = (String)cb.getItemAt(i);
				    //	 if(str.startsWith(buffer)==false){cb.removeItemAt(i); i--;}
				    // }
				    cb.getItemAt(2); cb.getItemAt(2); cb.getItemAt(2);
				//cb.validate();
				    
				  
			}

			@Override
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
 
Erinnerung:
besonders hilfreich wären ein vollständiges Testprogramm,
oder evtl. der StackTrace wie ich ihn vorgeschlagen habe
 
[Java]
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;


public class einmaleins extends JFrame implements ActionListener {

JComboBox cb;

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

public einmaleins(){

String[] Str = {"klar", "easy"};
cb=new JComboBox(Str);
cb.addActionListener(this);


cb.addKeyListener(new KeyListener(){

public void keyPressed(KeyEvent arg0) {
cb.getItemAt(0);
System.out.println("blabla");

}

public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub

}

});

this.getContentPane().add(cb);

this.setSize(200, 200);
this.setVisible(true);

}


public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource()==cb){
System.out.println("tüdelü");
}

}
}
[/Java]

Jo das hat nur etwas gedauert .. ^^
Also mittlerweile bin ich auch darauf gekommen, dass irgendwo in der ComboBox wohl festgelegt ist,
dass wenn man ne Taste drückt, der ein Item anwählt, was so anfängt.

Das würde ich gerne überschreiben, bzw. einfach deaktivieren.
Dabei müsste doch, wenn ich explizit einen KeyListener hinzufüge, dieses Verhalten ein Ende finden?
...
Gut okay vielleicht läuft das über den PopupMenuListener der Combobox ...
--- nein tut es nicht, den habe ich jetzt auch schon überschrieben !

Vielleicht einer der anderen unzähligen Listeners... Aber eigentlich ist für KeyEvents doch der KeyListener zuständig ?!

edit:

Zum Programm: Ich möchte, dass der ActionListener nicht angeworfen wird, wenn ich das Pop-Up-Menu öffne und "k" oder "e" drücke!
D.h. , wenn ich "k" oder "e" drücke, soll kein "tüdelü" ausgedruckt werden !

Danke für euren Input 🙂
 

Zurück
Oben