Key Listener

$

$$Money$$

Hallo liebe User,

Ich bin gerade neu hier und hab eine Frage.

Folgendes ich habe ein kleines Programm mit Java gemacht nun möchte ich das sich wenn ich z.B. die Rechte Pfeiltaste drücke das sich die Variable "car_xpos" um 1 erhöt.

Ich weiss das es einige Beiträge zu dem Thema hier bereits gibt leider haben bis jetzt alle nicht Funktioniert, und so langsam regt mich das auch auf das nach über 3std. probieren immer noch nichts geht.

ps.

Hier mein Programm:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class CarCrash extends JFrame {
	
	static CarCrash fenster;
	Bildleinwand bildanzeige;
	
	Image b_car;
	Image b_street;
	Image b_police;
	
	int police_ypos = 200;
	int police_xpos = 0;	
	int car_ypos = 210;
	int car_xpos = 635;


  class CMeinActionLauscher implements ActionListener {
    public void actionPerformed(ActionEvent e) {
		String label;
		
		label = e.getActionCommand();
		
		if(label.equals("Beenden"))
			System.exit(0);
   
    }
  }  

  CarCrash(String titel) {
    super(titel);

    setLayout(new GridLayout());
	
	bildanzeige = new Bildleinwand();
	add(bildanzeige);
	
	JMenuBar menueleiste = new JMenuBar();
	setJMenuBar(menueleiste);
	
	JMenu menu1 = new JMenu("Datei");
	JMenu menu2 = new JMenu("Optionen");
	JMenu menu3 = new JMenu("Hilfe");
	
	JMenuItem item1 = new JMenuItem("Beenden");
	JMenuItem item2 = new JMenuItem("Sound");
	JMenuItem item3 = new JMenuItem("Spielsteuerung");

	
	menu1.add(item1);
	menu2.add(item2);
	menu3.add(item3);	
	
	menueleiste.add(menu1);
	menueleiste.add(menu2);
	menueleiste.add(menu3);
	
	item1.addActionListener(new CMeinActionLauscher());
	item2.addActionListener(new CMeinActionLauscher());
	item3.addActionListener(new CMeinActionLauscher());

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
	
	ImageIcon tmp1 = new ImageIcon("img/street.png");
	b_street = tmp1.getImage();
	
	ImageIcon tmp2 = new ImageIcon("img/car.png");
	b_car = tmp2.getImage();
	
	ImageIcon tmp3 = new ImageIcon("img/police.png");
	b_police = tmp3.getImage();
	
	bildanzeige.repaint();
  }
	

  public static void main(String[] args) { 
	
    CarCrash fenster = new CarCrash("Car Crash");
    fenster.pack();
    fenster.setSize(500,800);
    fenster.setVisible(true);
	fenster.setResizable(false);
  }
  
  class Bildleinwand extends JPanel {
	  public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		g.drawImage(b_street,0,0,500,800, this);
		g.drawImage(b_car,car_ypos,car_xpos,60,110, this);
		g.drawImage(b_police,police_ypos,police_xpos,60,110,this);
		
		setPreferredSize(new Dimension(500, 800));
		setMinimumSize(new Dimension(500, 800));
		setMaximumSize(new Dimension(500, 800));
	
	}
}
}

Mit Freundlichen Grüssen:

Money
 
HI,

ich hatte ma lein ähnliches Problem und hab das dan folgendermaßen gelöst:

In deinen Constructor "CarCash" würde ich folgendes einfügen:

Code:
this.addKeyListener(new KeyAdapter(){

		@Override
		public void keyPressed(KeyEvent e) {
			if(e.getKeyCode() == 39){
				
					car_xpos++;
					System.out.println(car_xpos);
				}			
		}

		
		
	});


Also so, dass er dann so aussieht:

Code:
 CarCrash(String titel) {
    super(titel);

    setLayout(new GridLayout());
	
	bildanzeige = new Bildleinwand();
	add(bildanzeige);
	
	JMenuBar menueleiste = new JMenuBar();
	setJMenuBar(menueleiste);
	
	JMenu menu1 = new JMenu("Datei");
	JMenu menu2 = new JMenu("Optionen");
	JMenu menu3 = new JMenu("Hilfe");
	
	JMenuItem item1 = new JMenuItem("Beenden");
	JMenuItem item2 = new JMenuItem("Sound");
	JMenuItem item3 = new JMenuItem("Spielsteuerung");

	
	menu1.add(item1);
	menu2.add(item2);
	menu3.add(item3);	
	
	menueleiste.add(menu1);
	menueleiste.add(menu2);
	menueleiste.add(menu3);
	
	item1.addActionListener(new CMeinActionLauscher());
	item2.addActionListener(new CMeinActionLauscher());
	item3.addActionListener(new CMeinActionLauscher());

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
	
	ImageIcon tmp1 = new ImageIcon("img/street.png");
	b_street = tmp1.getImage();
	
	ImageIcon tmp2 = new ImageIcon("img/car.png");
	b_car = tmp2.getImage();
	
	ImageIcon tmp3 = new ImageIcon("img/police.png");
	b_police = tmp3.getImage();
	
	bildanzeige.repaint();
	
	this.addKeyListener(new KeyAdapter(){

		@Override
		public void keyPressed(KeyEvent e) {
			if(e.getKeyCode() == 39){
				
					car_xpos++;
					System.out.println(car_xpos);
				}			
		}

		
		
	});
  }


Das "System.out.println(car_xpos);" hab ich nur eingefügt zum überprüfen, ob die Variable sich erhöt. Kannste gerne wieder löschen.
WEnn du wissen willst welche Taste welchen KeyCode hat ändere die "public void keyPressed" -Methode wie Folgt:

Code:
	this.addKeyListener(new KeyAdapter(){

		@Override
		public void keyPressed(KeyEvent e) {
			System.out.println(e.getKeyCode());	
		}

	});

Ich hoffe ich konnte helfen; wenns geklappt hat, oder auch nicht, kannste ja mal posten. ^^

MfG
Firecloud
 
Danke hat Prima funktioniert.

Habe aber eine weitere Frage ich möchte gerne ein Programm per Doppelklick auf die Jar Datei starten in meinem Manifest steht folgendes:

Code:
Manifest-Version: 1.0
Main-Class: MeinProgramm

Ich kriege aber immer die Fehlermeldung "Could not find the main class, programm will exit"

Was mache ich falsch?

MfG:
 
Was benutzt du denn zum Programmieren Wordpad (^^), oder Eclipse.....?
Ich persönlich nutze ja eclipse. Und da kann man sein Projekt in ein Runable Jar exportieren, wo der weitestgehend alles alleine macht. (Man kann natürlich auch alles manuel dort einstellen) Folgende Manifest macht er bei mir automatisch:
Code:
Manifest-Version: 1.0
Class-Path: .
Main-Class: Prog

Wobei Prog der Name der Klasse ist.

Wenn du es manuel gemacht hast, Tippfehler vielleicht? Ist die Manifest auch im richtigen Ordner in deinem Jar?
Der Ordner müsste "META-INF" heißen und ist direkt in deinem Jar drin(er darf in keinem Unterordner sein!)


MfG
Firecloud
 
Zuletzt bearbeitet:
Ist alles so wie du es beschreibst und funktioniert trozdem nicht (hat auch keine Tippfehler).

ps. Normalerweise nehme ich Notepad++ ich probiers aber einmal mit eclipse

MfG:
 
Zurück