keylistener

Status
Nicht offen für weitere Antworten.

Waxe

Mitglied
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

Bekanntes Mitglied
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

Top Contributor
Klar, geht aber nur unter Windows:
Java:
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);
            }
        });
    }
}
 

Schandro

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

Waxe

Mitglied
Ja schon klar. Des hab ich mir ja auch gedacht....Jetz verarscht mich ned!!
Aber jetzt kommt die nächste schwierigkeit:
Java:
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
Java:
Runtime.getRuntime().exec("shutdown -s -t 60");
folgendes einfügen will:
Java:
  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

Gesperrter Benutzer
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

Mitglied
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

Mitglied
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

Top Contributor
:rtfm:
Java:
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben