KeyListener aus anderer Klasse hinzufügen

SkonroX

Aktives Mitglied
Hallo,

ich habe folgendes problem:
ich habe ein JFrame, welches als erstes normal als Menü benutzt wird (1 JLabel, 4 JButton), nach drücken der entsprechenden Buttons zum starten des spiels soll es direkt auf die BufferStrategy umspringen -> funktioniert wunderbar, doch wenn man eine taste drücken möchte passiert einfach nix, ebenso nicht wenn der fokus des fensters umspringt, was eine pausierung des spiels bewirken soll, d.h. der KeyListener und der WindowFocusListener wird nicht hinzugefügt, wobei der code durchlaufen wird (geprüft), wo kann das problem noch liegen??

lg
 

SkonroX

Aktives Mitglied
Hauptklasse:
Java:
private void InitializeFrame()
	{
		MainFrame							= new JFrame( "Snake Ultimate" );
		MainFrame.setSize					( new Dimension( 640, 480 ) );
		MainFrame.setDefaultCloseOperation	( 0 );
		MainFrame.setUndecorated			( true );
		MainFrame.setResizable				( false );
		MainFrame.setLocation				( new Point( GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().x - 320,
				GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().y - 240 ) );
		MainFrame.setVisible				( true );
	}
private void InitializeInterface()
	{
		Container Panel					= MainFrame.getContentPane();
		FirstButton 					= new JButton();
		SecondButton 					= new JButton();
		ThirdButton 					= new JButton();
		BackButton						= new JButton();
		Titel 							= new JLabel();
		FirstButton.setBounds			( new Rectangle(  70, 125, 500, 60 ) );
		SecondButton.setBounds			( new Rectangle(  70, 225, 500, 60 ) );
		ThirdButton.setBounds			( new Rectangle(  70, 325, 500, 60 ) );
		BackButton.setBounds			( new Rectangle( 450, 425, 150, 35 ) );
		Titel.setBounds					( new Rectangle(   0,  15, 640, 55 ) );
		FirstButton.setVisible			( false );
		SecondButton.setVisible			( false );
		ThirdButton.setVisible			( false );
		BackButton.setVisible			( false );
		FirstButton.setBackground		( Color.BLACK );
		Panel.setBackground				( Color.BLACK );
		SecondButton.setBackground		( Color.BLACK );
		ThirdButton.setBackground		( Color.BLACK );
		BackButton.setBackground		( Color.BLACK );
		FirstButton.setForeground		( Color.RED );
		SecondButton.setForeground		( Color.RED );
		ThirdButton.setForeground		( Color.RED );
		BackButton.setForeground		( Color.RED );
		Titel.setForeground				( Color.RED );
		FirstButton.setFont				( new Font( "Monospaced", Font.ITALIC, 32 ) );
		SecondButton.setFont			( new Font( "Monospaced", Font.ITALIC, 32 ) );
		ThirdButton.setFont				( new Font( "Monospaced", Font.ITALIC, 32 ) );
		BackButton.setFont				( new Font( "Monospaced", Font.ITALIC, 22 ) );
		Titel.setFont				   	( new Font( "Geneva", Font.BOLD, 48 ) );
		Titel.setHorizontalAlignment   	( SwingConstants.CENTER );
		Titel.setHorizontalTextPosition	( SwingConstants.CENTER );
		Panel.setLayout					( null );
		FirstButton.addActionListener	( new java.awt.event.ActionListener()
		{
			public void actionPerformed( java.awt.event.ActionEvent e )
			{ 
				new menu( FirstButton.getText() ); 
			}
		} );
		SecondButton.addActionListener( new java.awt.event.ActionListener()
		{
			public void actionPerformed( java.awt.event.ActionEvent e )
			{ 
				new menu( SecondButton.getText() ); 
			}
		} );
		ThirdButton.addActionListener( new java.awt.event.ActionListener()
		{
			public void actionPerformed( java.awt.event.ActionEvent e ) 
			{
				new menu( ThirdButton.getText() );
			}
		} );
		BackButton.addActionListener( new java.awt.event.ActionListener()
		{
			public void actionPerformed( java.awt.event.ActionEvent e )
			{
				if( Titel.getText().equals( "Snake Ultimate" ) )
					System.exit( 0 );
				else
					new menu( Titel.getText() + "2" );
			}
		} );
		Panel.add( Titel, null );
		Panel.add( FirstButton, null );
		Panel.add( SecondButton, null );
		Panel.add( ThirdButton, null );
		Panel.add( BackButton, null );
		new menu( "MainMenu" );
	}
und dann ingame:
Java:
private void InitializeFrame() 
	{
		//JOptionPane.showMessageDialog( null, "Controls:\nUp - Move Up\nLeft - Move Left\nDown - Move Down" +
		//		"\nRight - Move Right\nR - Restart\nESC - Pause / Exit");
		Frame.setSize( SnakeApplication.Resolution );
		Frame.setCursor( Toolkit.getDefaultToolkit().createCustomCursor( new BufferedImage( 
				1, 1, BufferedImage.TYPE_4BYTE_ABGR ), new Point( 0,0 ), "NOCURSOR" ) );
		Frame.setLocation( new Point( GraphicsEnvironment.getLocalGraphicsEnvironment()
				.getCenterPoint().x - ( Frame.getSize().width / 2 ), GraphicsEnvironment
				.getLocalGraphicsEnvironment().getCenterPoint().y - ( Frame.getSize().height / 2 ) ) );
		Frame.addKeyListener		 ( new Listener() );
		Frame.addWindowFocusListener ( new Listener() );
	}
Wobei frame das MainFrame aus der anderen Klasse ist.
Dazu laufen eben noch die Graphics drüber ingame.

lg
 

Volvagia

Top Contributor
Variablennamen schreibt man klein, und statt setLocation kannst du setLocationRelativeTo verwenden.
Das mit KeyListener und GUI-Elementen ist so eine Sache. Der KeyListener funktioniert nur an dem Komponenten, der derzeit den Focus hat. Deshalb versuche als Erste mal, einfach nur requestFocus aufzurufen, nach dem du fertig bist.
 

SkonroX

Aktives Mitglied
Schönheitsfehler sind erstmal nebensächlich, dazu hab ich das mit .requestFocus bereits probiert, ich habe sogar schon versucht getrennte JPanels und JFrames zu verwenden, beides ohne erfolg, nun bin ich dabei zwar ein JFrame für beides zu nutzen, dafür bereits in der ersten klasse direkt die listener zu implementieren, sodass es nicht nachträglich gemacht werden muss.
Jedoch ohne erfolg.
 

Volvagia

Top Contributor
Das funktioniert ohne Probleme:

Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class Excercise2
{
	private static JFrame MainFrame;
	private static JButton FirstButton;
	private static JButton SecondButton;
	private static JButton ThirdButton;
	private static JButton BackButton;
	private static JLabel Titel;
		
	public static void main(String[] args)
    {
        MainFrame                           = new JFrame( "Snake Ultimate" );
        MainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MainFrame.setSize                   ( new Dimension( 640, 480 ) );
        MainFrame.setResizable              ( false );
        MainFrame.setLocation( new Point( GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().x - 320,
                GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().y - 240 ) );
        InitializeInterface();
    }
	private static void InitializeInterface()
    {
        Container Panel                 = MainFrame.getContentPane();
        FirstButton                     = new JButton("Button");
        SecondButton                    = new JButton();
        ThirdButton                     = new JButton();
        BackButton                      = new JButton();
        Titel                           = new JLabel();
        FirstButton.setBounds           ( new Rectangle(  70, 125, 500, 60 ) );
        SecondButton.setBounds          ( new Rectangle(  70, 225, 500, 60 ) );
        ThirdButton.setBounds           ( new Rectangle(  70, 325, 500, 60 ) );
        BackButton.setBounds            ( new Rectangle( 450, 425, 150, 35 ) );
        Titel.setBounds                 ( new Rectangle(   0,  15, 640, 55 ) );
        SecondButton.setVisible         ( false );
        ThirdButton.setVisible          ( false );
        BackButton.setVisible           ( false );
        FirstButton.setBackground       ( Color.BLACK );
        Panel.setBackground             ( Color.BLACK );
        SecondButton.setBackground      ( Color.BLACK );
        ThirdButton.setBackground       ( Color.BLACK );
        BackButton.setBackground        ( Color.BLACK );
        FirstButton.setForeground       ( Color.RED );
        SecondButton.setForeground      ( Color.RED );
        ThirdButton.setForeground       ( Color.RED );
        BackButton.setForeground        ( Color.RED );
        Titel.setForeground             ( Color.RED );
        FirstButton.setFont             ( new Font( "Monospaced", Font.ITALIC, 32 ) );
        SecondButton.setFont            ( new Font( "Monospaced", Font.ITALIC, 32 ) );
        ThirdButton.setFont             ( new Font( "Monospaced", Font.ITALIC, 32 ) );
        BackButton.setFont              ( new Font( "Monospaced", Font.ITALIC, 22 ) );
        Titel.setFont                   ( new Font( "Geneva", Font.BOLD, 48 ) );
        Titel.setHorizontalAlignment    ( SwingConstants.CENTER );
        Titel.setHorizontalTextPosition ( SwingConstants.CENTER );
        Panel.setLayout                 ( null );
        FirstButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e )
            {
            	InitializeFrame2(MainFrame);
            }
        });
        Panel.add( Titel, null );
        Panel.add( FirstButton, null );
        Panel.add( SecondButton, null );
        Panel.add( ThirdButton, null );
        Panel.add( BackButton, null );
        
        MainFrame.setVisible(true);
    }
	private static void InitializeFrame2(JFrame Frame) 
    {
        Frame.addKeyListener(new Listener());
        Frame.requestFocus();
    }	
	public static class Listener implements KeyListener
	{

		@Override
		public void keyTyped(KeyEvent e)
		{
			// TODO Auto-generated method stub

		}

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

		@Override
		public void keyReleased(KeyEvent e)
		{
			// TODO Auto-generated method stub

		}

	}
}
 

SkonroX

Aktives Mitglied
Ich hab es nochmal versucht, funktioniert nicht..
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
public class SnakeApplication
{
	public static JLabel				Titel				= null;
	public static JButton				FirstButton			= null,
										SecondButton		= null,
										ThirdButton 		= null,
										BackButton			= null;
	public static JFrame				MainFrame			= new JFrame( "Snake Ultimate" ),
										GameFrame			= new JFrame( "Snake Ultimate INGAME" );
	public static String				Difficulty			= "Medium";
	public static Graphics				Graphics 			= null;
	public static boolean 				Vsync				= true;
	public static Dimension				Resolution			= new Dimension( 1280, 900 );
	public static BufferStrategy		BufStrat			= null;
	public static void main( String[] args )
	{
		new SnakeApplication();
	}
	public SnakeApplication()
	{
		InitializeFrames();
		if( JOptionPane.showConfirmDialog(null, "Snake mit Menü Starten?", "Snake Ultimate", JOptionPane.YES_NO_OPTION) == 0 )
			InitializeInterface();
		else
			new SnakeGame();
	}
	private void InitializeFrames()
	{
		MainFrame.setSize						( new Dimension( 640, 480 ) );
		MainFrame.setDefaultCloseOperation		( 0 );
		GameFrame.setDefaultCloseOperation		( 0 );
		MainFrame.setUndecorated				( true );
		GameFrame.setUndecorated				( true );
		MainFrame.setResizable					( false );
		GameFrame.setResizable					( false );
		MainFrame.getContentPane().setLayout	( null );
		MainFrame.getContentPane().setBackground( Color.BLACK );
		MainFrame.setLocation					( new Point( GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().x - 320,
													GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().y - 240 ) );
		GameFrame.setCursor						( Toolkit.getDefaultToolkit().createCustomCursor( new BufferedImage( 
													1, 1, BufferedImage.TYPE_4BYTE_ABGR ), new Point( 0,0 ), "NOCURSOR" ) );
		MainFrame.setVisible					( true );
	}
	public static void InitializeFrame2()
	{
		GameFrame.setSize					( Resolution );
		GameFrame.setLocation				( new Point( GraphicsEnvironment.getLocalGraphicsEnvironment()
												.getCenterPoint().x - ( GameFrame.getSize().width / 2 ), GraphicsEnvironment
												.getLocalGraphicsEnvironment().getCenterPoint().y - ( GameFrame.getSize().height / 2 ) ) );
		GameFrame.addKeyListener			( new Listener() );
		GameFrame.addWindowFocusListener	( new Listener() );
		GameFrame.requestFocus();
		GameFrame.setVisible				( true );
		GameFrame.createBufferStrategy		( 2 );
		BufStrat 							= GameFrame.getBufferStrategy();
	}
	private void InitializeInterface()
	{
		Container Panel					= MainFrame.getContentPane();
		FirstButton 					= new JButton();
		SecondButton 					= new JButton();
		ThirdButton 					= new JButton();
		BackButton						= new JButton();
		Titel 							= new JLabel();
		FirstButton.setBounds			( new Rectangle(  70, 125, 500, 60 ) );
		SecondButton.setBounds			( new Rectangle(  70, 225, 500, 60 ) );
		ThirdButton.setBounds			( new Rectangle(  70, 325, 500, 60 ) );
		BackButton.setBounds			( new Rectangle( 450, 425, 150, 35 ) );
		Titel.setBounds					( new Rectangle(   0,  15, 640, 55 ) );
		FirstButton.setVisible			( false );
		SecondButton.setVisible			( false );
		ThirdButton.setVisible			( false );
		BackButton.setVisible			( false );
		FirstButton.setBackground		( Color.BLACK );
		SecondButton.setBackground		( Color.BLACK );
		ThirdButton.setBackground		( Color.BLACK );
		BackButton.setBackground		( Color.BLACK );
		FirstButton.setForeground		( Color.RED );
		SecondButton.setForeground		( Color.RED );
		ThirdButton.setForeground		( Color.RED );
		BackButton.setForeground		( Color.RED );
		Titel.setForeground				( Color.RED );
		FirstButton.setFont				( new Font( "Monospaced", Font.ITALIC, 32 ) );
		SecondButton.setFont			( new Font( "Monospaced", Font.ITALIC, 32 ) );
		ThirdButton.setFont				( new Font( "Monospaced", Font.ITALIC, 32 ) );
		BackButton.setFont				( new Font( "Monospaced", Font.ITALIC, 22 ) );
		Titel.setFont				   	( new Font( "Geneva", Font.BOLD, 48 ) );
		Titel.setHorizontalAlignment   	( SwingConstants.CENTER );
		Titel.setHorizontalTextPosition	( SwingConstants.CENTER );
		FirstButton.addActionListener	( new Listener() );
		SecondButton.addActionListener	( new Listener() );
		ThirdButton.addActionListener	( new Listener() );
		BackButton.addActionListener	( new Listener() );
		Panel.add						( Titel, null );
		Panel.add						( FirstButton, null );
		Panel.add						( SecondButton, null );
		Panel.add						( ThirdButton, null );
		Panel.add						( BackButton, null );
		new menu						( "MainMenu" );
	}
}
 

Volvagia

Top Contributor
Ich hatte mit Listener noch nie echte Probleme. Und ich bin echt nicht das, was man unter einen guten Coder verstehen könnte. :rolleyes:

Der Code funktioniert bei mir wieder problemlos. Der Reihe nach, was ich gemacht habe: Das Else im Konstruktor auskommentiert, das GameFrame.setUndecorated in InitializeFrames auskommentiert, in ...2 das setSize auf nur 100x100 gesetzt, addWindowFocusListener auskommentiert und GameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); hinzugefügt, im InitializeInterface() FirstButton.setVisible auskommentiert und den Button mit new JButton("Start"); intialisiert, einen anonymen Listener hinzugefügt der InitializeFrame2(); aufruft und die restlichen addActionListener aller Buttons auskommentiert. Am Ende noch new menu entfernt. Dann noch eine Klasse namens Listener die den KeyListener implementiert geschrieben und irgendeine Standartausgabe gemacht. Funktioniert tadellos.

Du musst wohl etwas mehr Code zeigen, das wir es ohne jegliche Veränderung testen können. Womöglich habe ich die Fehlerquelle unbemerkt entfernt, aber ohne die Änderungen ging es natürlich nicht. ^^
 

Michael...

Top Contributor
Ich würde mich da echt von der Lösung mittels KeyListener verabschieden, da dieser Dir - auch wenn es mal funktioniert - u.U. später noch Probleme bereiten kann (bzw. bei Dir gibt's ja schon Probleme)
Denke nicht, dass der KeyListener für solche Zwecke gedacht ist.

Hier mal ein Beispiel mit Key Bindings (reagiert auf Cursortasten Up & Down):
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class KeyBindingDemo2 extends JFrame {
	public KeyBindingDemo2() {
		this.setContentPane(new GamePanel());
	}
	
	class GamePanel extends JPanel {
		private int x, y;
		public GamePanel() {
			Action downAction = new AbstractAction() {
			    public void actionPerformed(ActionEvent e) {
			    	y+=10;
			    }
			};
			Action upAction = new AbstractAction() {
			    public void actionPerformed(ActionEvent e) {
			    	y-=10;
			    }
			};
			InputMap inputMap = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
			inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "downAction");
			inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "upAction");
			this.getActionMap().put("downAction", downAction);
			this.getActionMap().put("upAction", upAction);
			new Thread(new Runnable() {
				public void run() {
					while(true) {
						try {
							Thread.sleep(20);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						calculateNextPos();
					}
				}
			}).start();
		}
		
		private void calculateNextPos(){
			x+=5;
			if (x>this.getWidth())
				x=0;
			repaint();
		}
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.setColor(Color.BLUE);
			g.fillRect(x, y, 10, 10);
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new KeyBindingDemo2();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 

Shulyn

Bekanntes Mitglied
Hast du die "Listener" class von Volva. benutzt?

[Java]

public static class Listener implements KeyListener
{
...


//------------------------ aus deinem Code ---

FirstButton.addActionListener ( new Listener() );
SecondButton.addActionListener ( new Listener() );
ThirdButton.addActionListener ( new Listener() );
BackButton.addActionListener ( new Listener() );


[/Java]

Das kann nicht Funktionieren.
Da Listener KeyListener implementiert und nicht ActionListener. Sollte sich nicht compilieren lassen...

ActionListener = Hört auf ACTIONS (z.B selbst geschriebene Actions)
MouseListener = Hört auf MouseEvents (z.B MouseClicked)
KeyListener = Hört auf KeyEvent (z.B A KeyPresed)

Wenn du deinen ganzen Code postet kann ich dir bestimmt helfen, mit "geht nicht" leider nicht...

Was soll den an die Buttons ????:L
 
Zuletzt bearbeitet:

SkonroX

Aktives Mitglied
okay okay,
also ich habe es folgend umschrieben:

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferStrategy;
public class SnakeApplication
{
	public static JLabel				Titel				= null;
	public static JButton				FirstButton			= null,
										SecondButton		= null,
										ThirdButton 		= null,
										BackButton			= null;
	public static JFrame				Frame				= new JFrame( "Snake Ultimate" );
	public static String				Difficulty			= "Medium";
	public static Graphics				Graphics 			= null;
	public static boolean 				Vsync				= true;
	public static Dimension				Resolution			= new Dimension( 1280, 900 );
	public static BufferStrategy		BufStrat			= null;
	public static JPanel				MenuPanel			= new JPanel(),
										GamePanel			= new JPanel();
	public static void main( String[] args )
	{
		new SnakeApplication();
	}
	public SnakeApplication()
	{
		InitializeFrame( MenuPanel );
		if( JOptionPane.showConfirmDialog( null, "Snake mit Menü Starten?", "Snake Ultimate", JOptionPane.YES_NO_OPTION ) == 0 )
			InitializeInterface();
		else
			new SnakeGame();
	}
	public static void InitializeFrame( JPanel Panel )
	{
		Frame.setSize						( new Dimension( 640, 480 ) );
		Frame.setDefaultCloseOperation		( 0 );
		Frame.setUndecorated				( true );
		Frame.setResizable					( false );
		Frame.setFocusable					( true );
		Frame.setContentPane				( Panel );
		Frame.getContentPane().setLayout	( null );
		Frame.getContentPane().setBackground( Color.BLACK );
		Frame.setLocation					( new Point( GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().x - 320,
												GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().y - 240 ) );
		Frame.setVisible					( true );
		Frame.createBufferStrategy			( 2 );
		BufStrat 							= Frame.getBufferStrategy();
	}
	private void InitializeInterface()
	{
		FirstButton 					= new JButton();
		SecondButton 					= new JButton();
		ThirdButton 					= new JButton();
		BackButton						= new JButton();
		Titel 							= new JLabel();
		FirstButton.setBounds			( new Rectangle(  70, 125, 500, 60 ) );
		SecondButton.setBounds			( new Rectangle(  70, 225, 500, 60 ) );
		ThirdButton.setBounds			( new Rectangle(  70, 325, 500, 60 ) );
		BackButton.setBounds			( new Rectangle( 450, 425, 150, 35 ) );
		Titel.setBounds					( new Rectangle(   0,  15, 640, 55 ) );
		FirstButton.setVisible			( false );
		SecondButton.setVisible			( false );
		ThirdButton.setVisible			( false );
		BackButton.setVisible			( false );
		FirstButton.setBackground		( Color.BLACK );
		SecondButton.setBackground		( Color.BLACK );
		ThirdButton.setBackground		( Color.BLACK );
		BackButton.setBackground		( Color.BLACK );
		FirstButton.setForeground		( Color.RED );
		SecondButton.setForeground		( Color.RED );
		ThirdButton.setForeground		( Color.RED );
		BackButton.setForeground		( Color.RED );
		Titel.setForeground				( Color.RED );
		FirstButton.setFont				( new Font( "Monospaced", Font.ITALIC, 32 ) );
		SecondButton.setFont			( new Font( "Monospaced", Font.ITALIC, 32 ) );
		ThirdButton.setFont				( new Font( "Monospaced", Font.ITALIC, 32 ) );
		BackButton.setFont				( new Font( "Monospaced", Font.ITALIC, 22 ) );
		Titel.setFont				   	( new Font( "Geneva", Font.BOLD, 48 ) );
		Titel.setHorizontalAlignment   	( SwingConstants.CENTER );
		Titel.setHorizontalTextPosition	( SwingConstants.CENTER );
		FirstButton.addActionListener	( new Listener() );
		SecondButton.addActionListener	( new Listener() );
		ThirdButton.addActionListener	( new Listener() );
		BackButton.addActionListener	( new Listener() );
		MenuPanel.add					( Titel, null );
		MenuPanel.add					( FirstButton, null );
		MenuPanel.add					( SecondButton, null );
		MenuPanel.add					( ThirdButton, null );
		MenuPanel.add					( BackButton, null );
		new menu						( "MainMenu" );
	}
}

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Listener implements WindowFocusListener, ActionListener
{
	private static Action 		MoveUp 		= null,
				  				MoveDown 	= null,
				  				MoveLeft 	= null,
				  				MoveRight 	= null;
	public Listener()
	{
		InitializeInputMap();
		InitializeActions();
	}
	private static void InitializeInputMap()
	{
		ActionMap 		Actions 	= SnakeApplication.GamePanel.getActionMap();
		InputMap 		input 		= SnakeApplication.GamePanel.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
		input.put( KeyStroke.getKeyStroke( KeyEvent.VK_UP,    0 ),	"MoveUp" 	);
		input.put( KeyStroke.getKeyStroke( KeyEvent.VK_DOWN,  0	),	"MoveDown" 	);
		input.put( KeyStroke.getKeyStroke( KeyEvent.VK_LEFT,  0 ),	"MoveUp" 	);
		input.put( KeyStroke.getKeyStroke( KeyEvent.VK_RIGHT, 0 ),	"MoveDown" 	);
		Actions.put( "MoveUp", 		MoveUp 		);
		Actions.put( "MoveDown", 	MoveDown 	);
		Actions.put( "MoveLeft", 	MoveLeft 	);
		Actions.put( "MoveRight", 	MoveRight 	);
	}
	@SuppressWarnings( "serial" )
	private static void InitializeActions()
	{
		MoveUp = new AbstractAction()
		{
			public void actionPerformed( ActionEvent e )
			{
				if( SnakeGame.CurrentTurn != 3 )
		    		SnakeGame.CurrentTurn = 0;
			}
		};
		MoveDown = new AbstractAction()
		{
			public void actionPerformed( ActionEvent e )
			{
				if( SnakeGame.CurrentTurn != 0 )
		    		SnakeGame.CurrentTurn = 3;
			}
		};
		MoveLeft = new AbstractAction()
		{
			public void actionPerformed( ActionEvent e )
			{
				if( SnakeGame.CurrentTurn != 2 )
		    		SnakeGame.CurrentTurn = 1;
			}
		};
		MoveRight = new AbstractAction()
		{
			public void actionPerformed( ActionEvent e )
			{
				if( SnakeGame.CurrentTurn != 1 )
		    		SnakeGame.CurrentTurn = 2;
			}
		};
	}
	/*public void keyPressed( KeyEvent arg0 )
	{
		
    	
    	
    	
    	if( arg0.getKeyCode() == KeyEvent.VK_R )
    		SnakeGame.Restart();
    	if( arg0.getKeyCode() == KeyEvent.VK_ESCAPE )
    	{
    		if( SnakeGame.GameActive )
    			SnakeGame.GameActive = false;
    		else
    			System.exit( 0 );
    	}
    	if( arg0.getKeyCode() != KeyEvent.VK_ESCAPE && !SnakeGame.GameActive )
    	{
    		if( SnakeGame.ShowText.equals( "highscorebuf" ) )
    			SnakeGame.ShowText = "highscore";
    		if( SnakeGame.ShowText.equals( "gameoverbuf" ) )
    			SnakeGame.ShowText = "gameover";
    		SnakeGame.GameActive = true;
    	}
	}
	public void keyReleased( KeyEvent arg0 ){}
	public void keyTyped( KeyEvent arg0 ){}*/
	public void windowGainedFocus( WindowEvent e ){}
	public void windowLostFocus( WindowEvent e )
	{
		SnakeGame.GameActive = false;
	}
	public void actionPerformed( ActionEvent e )
	{ 
		if( e.getActionCommand().equals( "Exit" ) || e.getActionCommand().equals( "Back" ) )
			new menu( SnakeApplication.Titel.getText() + "2" );
		else
			new menu( e.getActionCommand() );
	}
}
 

Michael...

Top Contributor
In dem Code taucht viel zu viel static auf. In Deinem Fall sollte ein static und zwar das in der public static void main(...) völlig ausreichen.
In der OOP arbeitet man möglichst mit Objekten und referenzen auf diese.
In dem Code fehlt das wesentliche. Ausserdem gibt es Code Konventionen ;-)
 

SkonroX

Aktives Mitglied
Naja egal ich habe mich nun dazu entschieden einfach auch das Menü zu rendern mit dem BufferStrategy.. spart solch ein kopfzerbrechen und sieht noch besser aus :)
trotzdem vielen dank an alle die sich gedanken gemacht haben!

lg
 

Shulyn

Bekanntes Mitglied
registerKeyboardAction

Java:
 {
// Bsp.-Aufruf
registerKeyAction(rootPane, yourMoveUpAction, KeyEvent.VK_UP);
}

    public static final void registerKeyAction(final JRootPane rootPane, final Action action, final int virtualKey) {
        final KeyStroke stroke = KeyStroke.getKeyStroke(virtualKey, 0);
        rootPane.registerKeyboardAction(action, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
    }
 

SkonroX

Aktives Mitglied
ne ne ne... das war alles in ordnung, das problem lag darin, das die endlosschleife für das spiel wenn es mittendrin ist, in einer anderen klasse als in der main-class war, sodass die listener anscheinend keine chance hatten zu reagieren
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
D KeyListener Java Basics - Anfänger-Themen 7
B Keylistener auf JSpinner reagiert nicht? Java Basics - Anfänger-Themen 3
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5
E brauche hilfe beim KeyListener Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben