Key Kompinationen

Developer_Y

Gesperrt
Hi, ihr kennt doch die folgenden drei voids der Klasse "KeyListener"
Code:
keyreleased   
reypressed
keytyped
ICh weiß nur wie man sagen kann, was passieren soll, wenn man eine Taste drückt, kann mir aber einer sagen, wie man angeben kann, dass etwas passieren soll wenn mehrer Tasten z,B. 2 gleichzeitig gedrückt werden?
Code:
public void keyPressed(KeyEvent e) 
        { 
           if (e.getKeyChar()=='d') {/*hier die Aktion*/} 
        }
z.B. d und g
dass zum beispiel die Aktion System.exit passieren soll
danke schon mal im Voraus für eure Hilfe
 
Java:
package core;

import java.awt.Container;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyDingsda extends Container implements KeyListener, Runnable
{
	private static final long serialVersionUID = 1L;

	private boolean key_d_pressed;
	private boolean key_g_pressed;
	
	public KeyDingsda()
	{
		super();
		
		this.key_d_pressed = false;
		this.key_g_pressed = false;
		
		this.addKeyListener(this);
	}
	public void run()
	{
		while(true)
		{
			if(this.key_d_pressed && this.key_g_pressed)
				System.exit(0);
			this.warte(10l);
		}
	}	
	public void keyPressed(KeyEvent e)
	{
		switch(e.getKeyCode())
		{
			case(KeyEvent.VK_D):
				this.key_d_pressed = true;
				return;
			case(KeyEvent.VK_G):
				this.key_g_pressed = true;
				return;
		}
	}
	public void keyReleased(KeyEvent e)
	{
		switch(e.getKeyCode())
		{
			case(KeyEvent.VK_D):
				this.key_d_pressed = false;
				return;
			case(KeyEvent.VK_G):
				this.key_g_pressed = false;
				return;
		}
	}
	public void keyTyped(KeyEvent arg0){}
	
	private void warte(long l)
	{
		try
		{
			Thread.sleep(l);
		}
		catch(Throwable e)
		{
			e.printStackTrace();
		}
	}
}
 
oh sorry. falscher code der hier is es:
Code:
import java.awt.Container;
import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; 
public class KeyDingsda extends Container implements KeyListener, Runnable
{  
	private static final long serialVersionUID = 1L;  
	private boolean key_d_pressed;   
	private boolean key_g_pressed;   
	public KeyDingsda() 
	{       
		super();       
		this.key_d_pressed = false;
		this.key_g_pressed = false;      
		this.addKeyListener(this);  
		}    
	public void run()  
	{     
		while(true) 
		{        
			if(this.key_d_pressed && this.key_g_pressed)  
				System.exit(0);    
			this.warte(10l);     
			}  
		}    
	public void keyPressed(KeyEvent e)  
	{    
		switch(e.getKeyCode())      
		{        
		case(KeyEvent.VK_D):    
			this.key_d_pressed = true;      
		return;         
		case(KeyEvent.VK_G):          
			this.key_g_pressed = true; 
		return;   
		}  
		}  
	public void keyReleased(KeyEvent e) 
	{      		
		switch(e.getKeyCode())      
		{        
		case(KeyEvent.VK_D):     
			this.key_d_pressed = false;     
		return;         
		case(KeyEvent.VK_G):        
			this.key_g_pressed = false;        
       return;      
       }  
		}  
	public void keyTyped(KeyEvent arg0){}  
	
	private void warte(long l)   
	{    
		try       
		{        
			Thread.sleep(l);      
			}   
		catch(Throwable e)   
		{         
			e.printStackTrace();  
			}  
		}
	public static void main(String []args)
	{
		Frame frame = new Frame();
		frame.setVisible(true);
	}
	}
 
Du musst den Container noch zu Frame hinzufügen, und dafür sorgen das er dem Focus hat.
Außerdem würde ich dir empfehlen den KeyListener direkt an das Frame zu heften (beseitigt das Focus-Problem), und der Container-Klasse immer mitzuteilen welche Taste gedrückt wurde.
Am einfachsten im KeyListener/Frame dann die Event-Variable an eine public Method die so aussieht wie keyPressed bzw. keyReleased weiterleiten.

Aber du codest doch 3D, oder? In den Fall verwendet man doch eher SimpleUniverse's und KeyBehavior, oder? Habe ich zumindest mal gelesen, bin schon bei der Steuerung der Cam gescheitert. :(
 
ja noch ma hi, ja, ich code 3D
und wie du sehen kannst, das bild habe ich selbst mit JAva3D erstellt
naja egal, das mit Container, dass kommt mir ein Bisschen bekannt vor, in Java3D
aber es geht wahrscheinlich net, schade aber egal, trotzdem nochmal vielen Dank.
PS:
Hast du Interesse an der 3D Programmierung /3D SpieleProgrammierung?
 
Doch, tut es, man muss nur wissen wie man es einbindet. ^^

Java:
package core;

import javax.swing.JFrame;

public class Main extends JFrame
{
	private static final long serialVersionUID = 1L;

	public Main()
	{
		super();
		
		this.setSize(80, 60);
		this.setVisible(true);
		
		KeyDingsda keydingsda = new KeyDingsda();		
		new Thread(keydingsda, "KeyDingsda").start();	
		this.addKeyListener(keydingsda);
	}
	public static void main(String[] args)
	{
		new Main();
	}
}
////////////////////////////////////////////
package core;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyDingsda extends Object implements KeyListener, Runnable
{
	private static final long serialVersionUID = 1L;

	private boolean key_d_pressed;
	private boolean key_g_pressed;
	
	public KeyDingsda()
	{
		super();
		
		this.key_d_pressed = false;
		this.key_g_pressed = false;
	}
	public void run()
	{
		while(true)
		{
			if(this.key_d_pressed && this.key_g_pressed)
				System.exit(0);
			this.warte(10l);
		}
	}	
	public void keyPressed(KeyEvent e)
	{
		switch(e.getKeyCode())
		{
			case(KeyEvent.VK_D):
				this.key_d_pressed = true;
				return;
			case(KeyEvent.VK_G):
				this.key_g_pressed = true;
				return;
		}
	}
	public void keyReleased(KeyEvent e)
	{
		switch(e.getKeyCode())
		{
			case(KeyEvent.VK_D):
				this.key_d_pressed = false;
				return;
			case(KeyEvent.VK_G):
				this.key_g_pressed = false;
				return;
		}
	}
	public void keyTyped(KeyEvent arg0){}
	
	private void warte(long l)
	{
		try
		{
			Thread.sleep(l);
		}
		catch(Throwable e)
		{
			e.printStackTrace();
		}
	}
}

Das Frame registriert nun die andere Klasse als KeyListener (so hätte ich es am Anfang machen sollen, hab aber meine Gedanken grad in nen anderen Projekt stecken) und startet die andere Klasse als Thread, die die Tasten dann überprüft.
Funktioniert bei mir jetzt tadellos. (Kann mir bitte wer erklären wer auf die Idee kommt "F u n s t" zu zensieren?)

Bild sieht nicht schlecht aus.
In Java3D kommen ja auch relativ viele Klassen vor, die mehr oder weniger bekannte Namen haben. (wie z. B. Canvas3D)

Ja, habe eigendlich Interesse, aber kann selbst nur (zumindest relativ gut) Java und PHP. Und bei Java3D habe ich nur kapiert das man ein Canvas3D aus der Grafikeinstellung erstellt, daran ein SimpleUniverse hängt und per SimpleUniverse.getViewingPlatform.setNominalPlatform() oder so ähnlich die Kamera positioniert. Sobald ich mir vornehme etwas zu lernen und zu den Transform3D, TransformGroup usw. komme schaltet sich mein Gehirn ab.
 
NUr mal so, du beschäftigst dich bestimmt drei dimensional usw.
füg einfach immer so einen speziellen code ein, den du nicht verstehen musst, dann lasse der Welt freien lauf!
 
Auf die Idee bin ich auch mal gekommen. Habe mir einfach eine Klasse zusammengeschnipselt, bei der man mit ein paar Methoden die Kamera komplett steuern konnte. :suspekt:
Aber ich weiß nicht ob die Idee es so zu machen wirklich so optimal ist.

t das oben nun?
 
Ich möchte euch beide Bitten in diesem Forum auf eure Wortwahl und die Rechtschreibung zu achten!
 
Zurück