KeyEvent - Gedankenfehler?

Toastbot

Mitglied
Ich hab da mal ne Frage, bezüglich der KeyEvent´s.
Ich wollte ein Bild erstellen was je nach gedrückter Taste anders aussieht.
Vorab nur 2 Aussehen.
Hab die in Abhängigkeit von einem int angesetzt, und will diesen über Tastendruck verändern.
Kann mir jemand sagen was ich falsch gemacht habe?
Java:
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Rectangle2D;

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

import java.awt.event.*;

public class Toastbrot extends JFrame { 

	JPanel panel; 

	public Toastbrot(){ 
		panel = new KreisPanel(); 
		add(panel); 

		this.setSize(500, 500); 
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		this.setVisible(true);
	} 
	int mode = 1;
	public static void main(String[] args) { 
		new Toastbrot(); 
	} 
	
/*	
 	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_RIGHT ) {
			mode = 1;
		} else if (e.getKeyCode() == KeyEvent.VK_LEFT ) {
			mode = 0;
		} else if (e.getKeyCode() == KeyEvent.VK_UP ) {
			mode = 1;
		} else if (e.getKeyCode() == KeyEvent.VK_DOWN ) {
			mode = 0;
		}

		repaint();
*/

	public void keyPressed(KeyEvent e) {
	    int keyCode = e.getKeyCode();
	    switch( keyCode ) { 
	        case KeyEvent.VK_UP:
	            mode = 1;
	            break;
	        case KeyEvent.VK_DOWN:
	        	mode = 0;
	            break;
	        case KeyEvent.VK_LEFT:
	            // handle left
	            break;
	        case KeyEvent.VK_RIGHT :
	            // handle right
	            break;
	     }
	} 

	class KreisPanel extends JPanel { 
		public void paintComponent(Graphics g) { 

			Graphics2D g2d = (Graphics2D) g; 
			g2d.setColor(new Color( Integer.parseInt( "339933", 16 ) )); 
			g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

			//Toast
			int mx = 120; 
			int my = 170;
			int mr = 85; 
			int Rx = 100;
			int Ry = 150;
			int Rw = 250;
			int Rh = 300;
			int ox = 255;
			int oy = 85;
			int or = 170;
			//Augen
			int ax = 150;
			int ay = 200;
			int ab = 50;
			int ah = 150;
			int bx = 250;
			int by = 200;
			int bb = 50;
			int bh = 150;
			//Mund
			int nx = 150;
			int ny = 360;
			int nh = 50;
			int nb = 150;

			//ToastDunkel
			g2d.setColor(new Color( Integer.parseInt( "FF9900", 16 ) ));		
			g2d.fillRect(Rx, Ry, Rw, Rh);
			g2d.fillOval(ox, oy, or, or);
			g2d.fillOval(mx-mr, my-mr, 2*mr, 2*mr);

			//ToastHell
			g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
			g2d.fillRect(Rx+10, Ry+10, Rw-20, Rh-20);
			g2d.fillOval(ox+10, oy+10, or-20, or-20);
			g2d.fillOval(mx-mr+10, my-mr+10, 2*mr-20, 2*mr-20);

			//AugenWeiß
			g2d.setColor(new Color( Integer.parseInt( "FFFFFF", 16 ) ) );
			g2d.fillOval(ax, ay, ab, ah);
			g2d.fillOval(bx, by, bb, bh);

			//AugenSchwarz
			g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
			g2d.fillOval(ax+10, ay+50, ab-15, ah-65);
			g2d.fillOval(bx+10, by+50, bb-15, bh-65);		

			//Mund
			if (mode==1) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(nx, ny-5, nb, nh);
			}
			else if (mode==0) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(nx, ny+5, nb, nh);	
			}
		} 
	} 
}
Wichtige Stellen:
Java:
if (mode==1) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(nx, ny-5, nb, nh);
			}
			else if (mode==0) {
				g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
				g2d.fillOval(nx, ny, nb, nh);
				g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
				g2d.fillOval(nx, ny+5, nb, nh);	
			}
Java:
	public void keyPressed(KeyEvent e) {
	    int keyCode = e.getKeyCode();
	    switch( keyCode ) { 
	        case KeyEvent.VK_UP:
	            mode = 1;
	            break;
	        case KeyEvent.VK_DOWN:
	        	mode = 0;
	            break;
	        case KeyEvent.VK_LEFT:
	            // handle left
	            break;
	        case KeyEvent.VK_RIGHT :
	            // handle right
	            break;
	     }
	}
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
1. du brauchst einen KeyListener
2. du musst diesen KeyListener zu deinem Frame hinzufügen

Ich kanns nicht oft genug betonen, wenn du kein Verhalten an einen JFrame änderst, dann leite NICHT von JFrame ab, sondern benutze einfach eine Instanz.

Dann sieht das eventuell so aus:

Java:
package painting;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Toastbrot {
 
 
    public Toastbrot(){
    	JFrame frame = new JFrame("Toastbrot");
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.setLocationByPlatform(true);
        JPanel panel = new KreisPanel();
        frame.addKeyListener(new KeyAdapter() {
        	@Override
        	public void keyPressed(KeyEvent e) {
        		if (e.getKeyCode() == KeyEvent.VK_RIGHT ) {
                    mode = 1;
                } else if (e.getKeyCode() == KeyEvent.VK_LEFT ) {
                    mode = 0;
                } else if (e.getKeyCode() == KeyEvent.VK_UP ) {
                    mode = 1;
                } else if (e.getKeyCode() == KeyEvent.VK_DOWN ) {
                    mode = 0;
                }
                frame.repaint();
        	}
		});
        frame.add(panel);
 
        frame.pack();
        frame.setVisible(true);
    }
    int mode = 1;
    public static void main(String[] args) {
        new Toastbrot();
    }
   
    class KreisPanel extends JPanel {
		private static final long serialVersionUID = 1L;

		@Override
    	public Dimension getPreferredSize() {
    		return new Dimension(500, 500);
    	}
    	
        public void paintComponent(Graphics g) {
 
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(new Color( Integer.parseInt( "339933", 16 ) ));
            g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
 
            //Toast
            int mx = 120;
            int my = 170;
            int mr = 85;
            int Rx = 100;
            int Ry = 150;
            int Rw = 250;
            int Rh = 300;
            int ox = 255;
            int oy = 85;
            int or = 170;
            //Augen
            int ax = 150;
            int ay = 200;
            int ab = 50;
            int ah = 150;
            int bx = 250;
            int by = 200;
            int bb = 50;
            int bh = 150;
            //Mund
            int nx = 150;
            int ny = 360;
            int nh = 50;
            int nb = 150;
 
            //ToastDunkel
            g2d.setColor(new Color( Integer.parseInt( "FF9900", 16 ) ));       
            g2d.fillRect(Rx, Ry, Rw, Rh);
            g2d.fillOval(ox, oy, or, or);
            g2d.fillOval(mx-mr, my-mr, 2*mr, 2*mr);
 
            //ToastHell
            g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
            g2d.fillRect(Rx+10, Ry+10, Rw-20, Rh-20);
            g2d.fillOval(ox+10, oy+10, or-20, or-20);
            g2d.fillOval(mx-mr+10, my-mr+10, 2*mr-20, 2*mr-20);
 
            //AugenWeiß
            g2d.setColor(new Color( Integer.parseInt( "FFFFFF", 16 ) ) );
            g2d.fillOval(ax, ay, ab, ah);
            g2d.fillOval(bx, by, bb, bh);
 
            //AugenSchwarz
            g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
            g2d.fillOval(ax+10, ay+50, ab-15, ah-65);
            g2d.fillOval(bx+10, by+50, bb-15, bh-65);      
 
            //Mund
            if (mode==1) {
                g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
                g2d.fillOval(nx, ny, nb, nh);
                g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
                g2d.fillOval(nx, ny-5, nb, nh);
            }
            else if (mode==0) {
                g2d.setColor(new Color( Integer.parseInt( "000000", 16 ) ) );
                g2d.fillOval(nx, ny, nb, nh);
                g2d.setColor(new Color( Integer.parseInt( "FFCC66", 16 ) ) );
                g2d.fillOval(nx, ny+5, nb, nh);
            }
        }
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
T KeyEvent Problem Hilfe!! Java Basics - Anfänger-Themen 5
Xentox501 keyevent.VK_LEFT wird beim drücken jeder belibigen Taste aktiv. Java Basics - Anfänger-Themen 3
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
B Input/Output jTextField - KeyEvent - Zeichen soll nicht erscheinen Java Basics - Anfänger-Themen 6
F KeyEvent Frage Java Basics - Anfänger-Themen 2
MrGe keyevent gleichheitszeichen Java Basics - Anfänger-Themen 2
S KeyEvent Maker funktioniert nicht. Java Basics - Anfänger-Themen 4
S String KeyEvent parsen Java Basics - Anfänger-Themen 2
I KeyEvent macht nichts.^^ Java Basics - Anfänger-Themen 3
D KeyEvent Taste blockieren. Java Basics - Anfänger-Themen 2
StickToFreak Graphicsg, KeyEvent ec <-- geht das? Java Basics - Anfänger-Themen 11
? Problem mit KeyEvent.VK_DOWN Java Basics - Anfänger-Themen 4
A KeyEvent wird nicht erkannt Java Basics - Anfänger-Themen 2
A keyevent > keyPressed > vk_enter Java Basics - Anfänger-Themen 12
P KeyEvent.VK_Enter Java Basics - Anfänger-Themen 3
G KeyEvent in JFrame Java Basics - Anfänger-Themen 2
S Keyevent in Panel Java Basics - Anfänger-Themen 5
C public void keyPressed(KeyEvent e) Java Basics - Anfänger-Themen 2
G KeyListener und KeyEvent Java Basics - Anfänger-Themen 6
S KeyEvent Tastenkombination? Java Basics - Anfänger-Themen 1
D Button KeyEvent zuweisen. Java Basics - Anfänger-Themen 15
G KeyEvent verzögert Java Basics - Anfänger-Themen 11
G KeyEvent auswerten Java Basics - Anfänger-Themen 2
Z KeyEvent in JButton? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben