KeyListener implementieren

Status
Nicht offen für weitere Antworten.

bliko

Mitglied
Ich möchte, dass durch das Drücken der Enter-Taste ein Ereignis ausgelöst wird, tut es aber nicht.

Hier der Code
Code:
public class BinBaumPanel extends JPanel implements ActionListener, KeyListener{
	private BinBaum_grafisch b;
	private int[] feld = {4,3,7,8,6,3,2,1,0,9,10,5,12};
	private JButton enter, loeschen;
	private JLabel l1;
	private JTextField t1;
	private Dimension d = new Dimension(50,27);
	private int s, x_akt, y_akt, e_akt, x_Pos, y_Pos;
	private int x_Prev, y_Prev, versatz_s, versatz_l;
	private Font f = new Font("Verdana", Font.BOLD, 12);
	
	public BinBaumPanel(){
		b = new BinBaum_grafisch();
		x_akt = 200;
		y_akt = 80;
		e_akt = 0;
		versatz_l = 5;
		l1 = new JLabel("Geben Sie eine ganze Zahl >=0 ein:", SwingConstants.RIGHT);
		t1 = new JTextField("");
		t1.setPreferredSize(d);
		enter = new JButton("EINGEBEN");
		enter.addActionListener(this);
		//enter.addKeyListener(new MyKL());
		add(l1);
		add(t1);
		add(enter);
		addKeyListener(this);
	}
	
	public void ausgeben(int[] f){
		Graphics g = getGraphics();
		f = feld;
		//einfuegenFeld(f);
		
		for (int i=0; i<feld.length; i++){
			if (i==feld.length)break;
			int vorg = b.findeVorgaenger(feld[i], feld[i]);
			x_Pos = b.getX(feld[i], x_akt, e_akt);
			x_Prev = b.getX(vorg, x_akt, e_akt);
			y_Pos = b.getY(feld[i], y_akt, e_akt);
			y_Prev = b.getY(vorg, y_akt,e_akt);
			
			if (x_Pos < x_Prev){
				versatz_s = 7;
			}
			else {
				versatz_s = 0;
			}
			String s = String.valueOf(feld[i]);
			
			g.drawString(s, x_Pos-versatz_s, y_Pos);
			g.drawLine(x_Prev, y_Prev, x_Pos, y_Pos);
		}
	}
	
	
	
	public void paintComponent (Graphics grafik)
	{
		//grafik = leinwand.getGraphics();
		super.paintComponents(grafik);
		grafik.setColor(Color.lightGray);
		
		// Horizontale Rasterlinien
		for (int y=0; y<this.getHeight(); y+= 40){
			grafik.drawLine(0,y,400,y);
		}
		
		// Vertikale Rasterlinien
		for (int x=0; x<getHeight(); x+= 20){
			grafik.drawLine(x,40,x,500);
		}
	}
	
	/**
	 * Fügt die Schlüssel des Feldes vom Typ int[] in
	 * den Suchbaum ein;
	 * @param feld das Feld von Schlüssel;
	 */
	public void einfuegenFeld(int[] feld){
		for (int i=0; i<feld.length; i++){
			b.einfuegen(feld[i]);
		}
	}
	
	public void einfuegenSchluessel(int schluessel){
		int s = Integer.parseInt(t1.getText());
		b.einfuegen(s);
	}
	
	public void zeichneSchluessel(int schluessel){
		Graphics g = getGraphics();
		int s = schluessel;
		b.einfuegen(s);
		int vorg = b.findeVorgaenger(s, s);
		x_Pos = b.getX(s, x_akt, e_akt);
		x_Prev = b.getX(vorg, x_akt, e_akt);
		y_Pos = b.getY(s, y_akt, e_akt);
		y_Prev = b.getY(vorg, y_akt,e_akt);
		
		FontMetrics fm = getFontMetrics(f);
		String s_zahl = String.valueOf(s);
		int s_breite = fm.stringWidth(s_zahl);
		versatz_s = (int) Math.round(s_breite/2);
		
		//Umwandeln des Schlüssels vom Typ int in
		//einen String und Ausgabe der Zahl und der Linien
		String zahl = String.valueOf(s);
		int h = b.getHoehe();
		if (h==1){
			g.drawString(zahl, x_Pos-versatz_s, y_Pos+versatz_l);
		}
		else{
			g.drawString(zahl, x_Pos-versatz_s, y_Pos+versatz_l);
			if (x_Prev > x_Pos){
				g.drawLine(x_Prev-versatz_l, y_Prev+versatz_l, x_Pos+versatz_l, y_Pos-versatz_l);
			}
			else{
				g.drawLine(x_Prev+versatz_l, y_Prev+versatz_l, x_Pos-versatz_l, y_Pos-versatz_l);
			}
		}
		
		
	}
	
	
	/**
	 * Gibt den Ebenenabstand auf der y-Achse zurück
	 */
	
	public int getEbenenAbstand(){
		return b.getEbenenAbstand();
	}
	
	public void actionPerformed(ActionEvent e){
		Object source = e.getSource();
		if (source == enter){
			if(t1.getText().equals("")){return;}
			else{
				System.out.println("Enter gedrückt!");
				zeichneSchluessel(Integer.parseInt(t1.getText()));
			}
			//ausgeben(feld);
		}
	}
	
	
	//class MyKL implements KeyListener{
		public void keyReleased(KeyEvent e)
		 {
			int code = e.getKeyCode();
			if (code == e.VK_ENTER){
				if (t1.getText().equals("")){return;}
				else{
					System.out.println("Enter gedrückt!");
					zeichneSchluessel(Integer.parseInt(t1.getText()));
				}
				
			}
		 }
		public void keyPressed(KeyEvent e){if (e.getKeyChar() == e.VK_ENTER){
			if (t1.getText().equals("")){return;}
			else{
				System.out.println("Enter gedrückt!");
				zeichneSchluessel(Integer.parseInt(t1.getText()));
			}
			
		}}
		public void keyTyped(KeyEvent e){if (e.getKeyChar() == e.VK_ENTER){
			if (t1.getText().equals("")){return;}
			else{
				System.out.println("Enter gedrückt!");
				zeichneSchluessel(Integer.parseInt(t1.getText()));
			}
			
		}}
	//}
}
 

The_S

Top Contributor
Das JPanel muss auch den Fokus haben. Wenn z. b. dein JTextField den Fokus hat, braucht dein JTextField den KeyListener. Wenn du nur auf Enter im JTextField reagieren willst, kannst du dem JTextField auch einen ActionListener adden.
 

0x7F800000

Top Contributor
1) hier nimmst du "getKeyCode()" dort nimmst du "getKeyChar()" und vergleichst es plötzlich mit konstanten integer werten... was soll das werden?

2) warum hast du in drei funktionen denselben code reingeschrieben? reichte die "keyPressed(...)" alleine etwa nicht aus?

3) bist du dir sicher dass mit dem Listener irgendetwas faul ist? oder sind vielleicht die bedingungen in diesen ganzen abfragen nie erfüllt...

4)bist du dir sicher das dieses panel den focus hat wenn du es testest?
 

bliko

Mitglied
Danke, das war eine große Hilfe, ich habe den code in alle drei geschrieben, weil ich mir nicht sicher war, welche davon reagieren würde, du hast natürlich recht, dass auch keyPressed vollkommen ausreicht. Der Fehler lag aber v.a. daran, dass das JTextField den Fokus nicht hatte.

lg bliko
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
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
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
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