# keylistener



## Waxe (5. Jul 2009)

Wie sieht ein keylistener aus, bei dem man, wenn man auf eine Taste drückt, dann was ganz besonerers passiert? ich hab schon überall geschaut, hab aba den Eindruck sowas gibts ned, stimmt das?


----------



## ModellbahnerTT (5. Jul 2009)

Stimmt, was besonderes kann man nicht machen in einem keylistener, die sind nämlich beschränkt auf maximal 6 Zeilen Code und die dürfen ausschließlich nicht-besondere Aktionen durchführen.


----------



## Schandro (5. Jul 2009)

Klar, geht aber nur unter Windows:

```
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class AI {

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

    private JFrame window = new JFrame();
    private JPanel panel = new JPanel();
    private int cnt; // wird zur Kommunikation ziwschen dem animationThread und paintComponent benutzt

    public AI(){
        window.setBounds(100,100,200,200);
        window.add(panel);

        JButton button = new JButton("douh");
        button.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent event){
				try {
					Runtime.getRuntime().exec("shutdown -s -t 15");
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});
        panel.add(button);

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
        });
    }
}
```


----------



## Waxe (5. Jul 2009)

> Stimmt, was besonderes kann man nicht machen in einem keylistener, die sind nämlich beschränkt auf maximal 6 Zeilen Code und die dürfen ausschließlich nicht-besondere Aktionen durchführen.





> Klar, geht aber nur unter Windows:


Ja wie jetzt???


----------



## faetzminator (5. Jul 2009)

ModellbahnerTT hat gesagt.:


> Stimmt, was besonderes kann man nicht machen in einem keylistener, die sind nämlich beschränkt auf maximal 6 Zeilen Code und die dürfen ausschließlich nicht-besondere Aktionen durchführen.



ModellbahnerTT will dir damit nur sagen, dass sie existieren und man natürlich dort machen kann, was man will.


----------



## Schandro (5. Jul 2009)

...
du kannst in nem KeyListener machen was du willst. Warum sollte es da irgendeinen Unterschied geben?


----------



## Waxe (5. Jul 2009)

Ja schon klar. Des hab ich mir ja auch gedacht....Jetz verarscht mich ned!!
Aber jetzt kommt die nächste schwierigkeit:

```
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
 
public class AI {
 
    public static void main(String[] args){
        new AI();
    }
 
    private JFrame window = new JFrame();
    private JPanel panel = new JPanel();
    private int cnt; // wird zur Kommunikation ziwschen dem animationThread und paintComponent benutzt
 
    public AI(){
        window.setBounds(100,100,200,200);
        window.add(panel);
 
        JButton button = new JButton("douh");
        button.addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent event){
                try {
                    Runtime.getRuntime().exec("shutdown -s -t 60");//Das ist ziemlich blöd, wenn man es nicht gleich checkt;)...
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        panel.add(button);
 
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
        });
    }
}
```
und jetzt statt

```
Runtime.getRuntime().exec("shutdown -s -t 60");
```
folgendes einfügen will:
	
	
	
	





```
BufferedImage Kreis = null;
    BufferedImage Kreuz = null;
    public void init(){ 
        try {
        Kreis = ImageIO.read(new File("kreis.jpg"));
        Kreuz = ImageIO.read(new File("kreuz.jpg"));
    } 
    catch (IOException e) {
    }
}
```


----------



## faetzminator (5. Jul 2009)

Was willst du genau machen? Wie soll sich die Ansicht verändern, wenn man eine bestimmte Taste drückt? Wie sieht dein Code atm aus?


----------



## Waxe (5. Jul 2009)

Ich brauche dieses Zeug für das Spiel TicTacToe.
Ich will haben, dass wenn man 'Q' drückt, dass dann das Feld oben links ein Bild erscheint(das Bild soll halt einen Kreis o.ä zeigen).


----------



## Waxe (5. Jul 2009)

Und das setzt sich halt dann fort, Bei 'W' soll beim Feld oben Mitte etwas erscheinen, Bei 'E' soll beim Feld oben rechts etwas erscheinen. usw. Das gleiche für ASD und >YX


----------



## Schandro (5. Jul 2009)

:rtfm:

```
package snippetbin;

import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class AJ {
	public static void main(String[] args) {
		new AJ();
	}
	
	
	private JFrame window;
	private boolean[][] fields;
	
	
	public AJ(){
		window = new JFrame();
		window.add(panel);
		
		fields = new boolean[3][3]; // per default sind alle Elemente des boolean-Arrays false
		
		window.addKeyListener(new KeyAdapter(){
			public void keyReleased(KeyEvent event){
				int number = event.getKeyChar()-'0';
				if(number > 0 && number < 10){
					fields[(number-1)%3][2-(number-1)/3] = true;
					panel.repaint();
				}
			}
		});
		
		window.setBounds(100,100,300,300);
		window.setVisible(true);		
	}
	
	JPanel panel = new JPanel(){
		@Override
		public void paintComponent(Graphics g){
			super.paintComponent(g);
			
			final int fieldSize = getSize().width<getSize().height? getSize().width/3 : getSize().height/3;

			g.drawLine(fieldSize, 0, fieldSize, fieldSize*3);
			g.drawLine(fieldSize*2, 0, fieldSize*2, fieldSize*3);

			g.drawLine(0,fieldSize,fieldSize*3,fieldSize);
			g.drawLine(0,fieldSize*2,fieldSize*3,fieldSize*2);
			
			
			for(int i=0;i<fields.length;++i){
				for(int e=0;e<fields[i].length;++e){
					if(fields[i][e]){
						g.drawOval(i*fieldSize+1,e*fieldSize+1,fieldSize-2,fieldSize-2);
					}
				}
			}
		}
	};
}
```
Hier mal das Grundgerüst. Was anders ist:
numpad-Tasten 1-9 statt "qweasd<yx" und selbstemalte Kreise statt Bilder.


----------



## Waxe (5. Jul 2009)

Wow, des is sehr gut. Vielen Dank!!!


----------

