# probleme mit key event



## peter123 (17. Sep 2009)

er erkennt nicht den tastendruck:rtfm:

```
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;


class Event extends JFrame
{
    //Deklarationen
    JButton bEvent;
 
    Event()
    {
        super("Event");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container contentPane=this.getContentPane();
        contentPane.setLayout(new FlowLayout());
        bEvent=new JButton ("vorne");
        this.setSize(300,200);
        contentPane.add(bEvent);
        this.addKeyListener(new KeyAdapter()
		{
				public void keyPressed(KeyEvent ke)
				{
					if(ke.getKeyChar()=='i')
					{
						bEvent.setEnabled(false);
					}
				}

		});
        this.setVisible(true);
    }
    void sddf(){
    	System.out.print("a");
    }
}

public class Haupe {
	public static void main(String[] args) {
		Event f=new Event();
	}

}
```


----------



## SlaterB (17. Sep 2009)

```
public char getKeyChar()

    Returns the character associated with the key in this event. 
For example, the KEY_TYPED event for shift + "a" returns the value for "A".

    KEY_PRESSED and KEY_RELEASED events are not intended for reporting of character input. 
Therefore, the values returned by this method are guaranteed to be meaningful only for KEY_TYPED events.

    Returns:
        the Unicode character defined for this key event. 
If no valid Unicode character exists for this key event, CHAR_UNDEFINED is returned.
```
KeyEvent (Java Platform SE 6))

getKeyCode() aufrufen, public void keyTyped() überschreiben,

alles ausprobieren oder nachlesen


----------



## peter123 (17. Sep 2009)

:rtfm:mhhhh wie genau meineste soo 
	
	
	
	





```
this.addKeyListener(new KeyAdapter()
		{
				public void keyPressed(KeyEvent ke)
				{
					if(ke.getKeyChar()=='i')
					{
						getKeyCode((false)) ;
					}
				}

		});
        this.setVisible(true);
    }
    protected void getKeyCode(Object setEnabled) {
		bEvent.setEnabled(false);
		
	}
```


----------



## SlaterB (17. Sep 2009)

naja, das ist jetzt bisschen doppelt und unlogisch zusammengeschustert


```
this.addKeyListener(new KeyAdapter()
		{
				public void keyTyped(KeyEvent ke)
				{
					if(ke.getKeyChar()=='i')
					{
						bEvent.setEnabled(false);
					}
				}
		});
```
wäre dagegen annehmbar, falls es funktioniert


----------



## peter123 (17. Sep 2009)

funktionirt aber leider nicht 
aber mal so eine frage neben bei ist die Metohde keyTyped nur zum einmal tpippen wenn aj ist das halt nicht so die die ich suche denn wenn ich die tate wieder los lasse soll der button wieder anklikbar sein
thx


----------



## SlaterB (17. Sep 2009)

für keyPressed() mit getKeyCode() arbeiten statt getKeyChar()


----------



## Steev (17. Sep 2009)

[Java]
import java.awt.*;
import java.awt.event.*;

public class Example1802 extends Frame implements KeyListener {
    public static void main(String[] args) {
        Example1802 wnd = new Example1802();
    }

    public Example1802() {
        super("Nachrichtentransfer");
        setBackground(Color.lightGray);
        setSize(300, 200);
        setLocation(200, 100);
        setVisible(true);
        addKeyListener(this);
    }

    public void paint(Graphics g) {
        g.setFont(new Font("Serif", Font.PLAIN, 18));
        g.drawString("Zum Beenden bitte ESC drücken...", 10, 50);
    }

    public void keyPressed(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.VK_ESCAPE) {
            setVisible(false);
            dispose();
            System.exit(0);
        }
    }

    public void keyReleased(KeyEvent event) {}

    public void keyTyped(KeyEvent event) {}
}
[/Java]


----------



## SlaterB (17. Sep 2009)

ein Frame statt JFrame ist ja ein gefährlicher Vorschlag,

bei Swing ist das glaube ich etwas schwieriger,
KeyListener auf das ContentPane, und requestFocus() aufrufen,
ein normaler JButton oder so geht nicht?


----------



## Spacerat (17. Sep 2009)

...AWT, Swing, waa... Hauptsache er bekommt erst mal den KL vernünftig hin.
	
	
	
	





```
class MyKeyListener
extends KeyAdapter
{
  public void keyPressed(KeyEvent ke) {
    if(ke.getKeyCode() == KeyEvent.VK_I) {
      bEvent.setEnabled(false);
    }
  }

  public void keyReleased(KeyEvent ke) {
    if(ke.getKeyCode() == KeyEvent.VK_I) {
      bEvent.setEnabled(true);
    }
  }
}
```


----------



## Steev (17. Sep 2009)

@SlaterB:
Wieso, klappt doch...

Das Problem ist einfach nur, dass die Events nur ausgeführt werden, wenn das Fenster den Fokus hat.
Leider hat hier der Button den (Eingabe-) Fokus...

das hier geht:

[Java]import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

class Event extends JFrame
{
    //Deklarationen
    JButton bEvent;

    Event()
    {
        super("Event");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container contentPane=this.getContentPane();
        contentPane.setLayout(new FlowLayout());
        bEvent=new JButton ("vorne");
        this.setSize(300,200);
        contentPane.add(bEvent);
        bEvent.addKeyListener(new KeyAdapter()
        {
                public void keyPressed(KeyEvent ke)
                {
                    if(ke.getKeyChar()=='i')
                    {
                        bEvent.setEnabled(false);
                    }
                }

        });
        this.setVisible(true);
    }
    void sddf(){
        System.out.print("a");
    }
}

public class Haupe {
    public static void main(String[] args) {
        Event f=new Event();
    }
}[/Java]


----------



## Spacerat (17. Sep 2009)

Java API hat gesagt.:
			
		

> getKeyChar
> 
> public char getKeyChar()
> 
> ...


daraus folgt, das "getKeyChar()" innerhalb von "keyPressed()" bzw. "keyReleased()" nur zufällig oder gar nicht funktioniert.


----------



## Steev (18. Sep 2009)

Ich hatte ja nur seinen Ansatz abgeändert...
in meiner Lösung hatte ich ja auch KeyCode verwendet.


----------

