Probleme mit JPanel!KeyListener geht nicht

Robokopp

Bekanntes Mitglied
Hallo,

ich hab ein kleines Spiel angefangen, welches sich in etwa an IcyTower orientiert. Dazu hab ich eine MainKlasse, die JPanel erweitert.Der Aufbau ist ähnlich zu dem Tutorial hier im Forum, wo man den Heli steuern kann.D.h. die Klasse Sprite ist vorhanden, und das zeichnen der Objekte funktioniert im Prinzip genauso.

Nun hab ich eine weitere Klasse SideBar erstellt, die einen Seitenbereich erstellen soll, in dem dann bspw. die Score etc gezeichnet werden soll.

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JPanel;


public class SideBar extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private BufferedImage clock;
	private BufferedImage sidebarbackground;
	public SideBar(){
		JPanel panel = new JPanel();
		panel.setVisible(true);
		panel.add(this);
		try {
			clock=ImageIO.read(new File("Sources/clock.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			sidebarbackground=ImageIO.read(new File("Sources/sidebarbackground.jpg"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	public void paintComponent(Graphics g){
		g.drawImage(sidebarbackground, 0, 0,this.getWidth(),this.getHeight(), null);
		g.drawImage(clock, 30, 80,180,180, null);
		

	}
}

nun das verrückte:

sobald ich dem JFrame das Panel mit .add("East",sidebar) hinzufüge, funktionieren die Steuertasten im Spiel nicht mehr. Ich kann keine Aktionen ausführen.Alles wird korrekt angezeigt und Fehler gibt es auch nicht...

Meine Vermutung war, dass der KeyListener irgendwie überdeckt wird(?!?) so dass die Keyactions an die Sidebar weitergeleitet werden, anstatt an das Gamepanel.

Kann mir da jemand helfen?
wenn es nötig ist poste ich noch den Konstruktor der MainKlasse, aber der ist ja eh meistens annähernd gleich bei der Art von Projekten
 

Marco13

Top Contributor
Überdeckt wohl nicht, ist wohl eher ein Fokusproblem: Wenn der Fokus auf dem Slider ist, kann man desses Knopf z.B. mit den Pfeiltasten bewegen - aber auf dem Panel kommt nichts mehr an.

Das Panel selbst müßte wohl auch mit
panel.setFocusable(true);
fokussierbar gemacht werden. Dann sollte der KeyListener immer funktionieren, WENN man z.B. vorher mal in das Panel geklickt hat.

Abhilfen für den generellen Fall: Entweder ein FocusListener und sowas wie "requestFocusInWindow" auf dem Panel aufrufen, aber das ist heikel... Alternative könten How to Use Key Bindings (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features) sein
 

Robokopp

Bekanntes Mitglied
Okay danke, werde ich dann mal probieren. Aber ich verstehe nicht wo der Fokus hin sein soll. Ich hab keine slider und im anderen jpanel kommt auch nichts an.wenn ich das jpanel jedoch direkt in der Mainklasse erzeuge, funktioniert es.

Gesendet von meinem GT-I9100 mit Tapatalk
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ach ... Sidebar ... nicht Slider ... DAS war wohl EINDEUTIG zu spät gestern :oops:

Aber auch jetzt sieht der Code seltsam aus: Dort wird ein Panel erstellt, und die Sidebar wird zu diesem Panel hinzugefügt, aber ... das dort erstellte Panel hängt ja in der Luft...???:L
 

Robokopp

Bekanntes Mitglied
Achso das erklärt einiges:D

ne es hängt nicht in der Luft(siehe Anhang)^^
ich definiere die größe und Location in der Mainklasse ;)

ahh danke, das mit dem Fokus war des rätsels lösung
 

Anhänge

  • game.jpg
    game.jpg
    98,4 KB · Aufrufe: 54

Marco13

Top Contributor
Das kann aber nur die vom Sidebar-Panel sein - an das andere kommt man ja nicht mehr dran
Java:
    public SideBar(){
        JPanel panel = new JPanel();  // Erstelle ein neues Panel
        panel.setVisible(true); // Überflüssig, BTW...
        panel.add(this); // Füge die Sidebar zum neu erzeugten Panel hinzu

        ...
        // Mache hier NICHTS mehr mit dem neuen Panel,
        // und gib es NICHT nach draußen...
    }
Dieses Panel erfüllt keinen Zweck.

Hat aber nicht unbedingt mit dem Problem zu tun.

Ein Beispiel, was ich meinte: Hier wird ein KeyListener ans "Center"-Panel gehängt (das dazu Focusable sein muss!), und der reagiert auf Tastendrücke. Wenn man aber einmal den Button klickt, reagiert das Center-Penl erstmal nicht mehr, weil es den Fokus verliert.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class PanelTest
{
	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable()
		{
			@Override
			public void run()
			{
				createAndShowGUI();
			}
		});
	}
	
	private static void createAndShowGUI()
	{
		JFrame f = new JFrame();
		f.getContentPane().setLayout(new BorderLayout());
		
		JPanel center = new JPanel();
		center.add(new JLabel("Center"));
		center.setFocusable(true);
		
		// Wenn die Maus im Center gedrückt wird, 
		// fordere den Fokus an
		center.addMouseListener(new MouseAdapter()
		{
			@Override
			public void mousePressed(MouseEvent e)
			{
				e.getComponent().requestFocusInWindow();
			}
			@Override
			public void mouseEntered(MouseEvent e)
			{
				e.getComponent().requestFocusInWindow();
			}
		});
		center.setBackground(Color.GREEN);
		center.addKeyListener(createKeyListener("Center"));
		
		// Gib informationen darüber aus, wenn das 
		// Center den Fokus verliert
		center.addFocusListener(new FocusListener()
		{
			@Override
			public void focusLost(FocusEvent e)
			{
				System.out.println("Center LOST Focus to "+e.getOppositeComponent());
			}
			
			@Override
			public void focusGained(FocusEvent e)
			{
				System.out.println("Center GAINED Focus from "+e.getOppositeComponent());
			}
		});
		
		f.getContentPane().add(center, BorderLayout.CENTER);
		
		
		JPanel sideBar = new JPanel();
		sideBar.add(new JLabel("SideBar"));
		sideBar.add(new JButton("Button"));
		sideBar.addKeyListener(createKeyListener("SideBar"));
		sideBar.setBackground(Color.WHITE);
		f.getContentPane().add(sideBar, BorderLayout.EAST);
		
		f.setSize(500,500);
		f.setVisible(true);
	}
	
	private static KeyListener createKeyListener(final String name)
	{
		return new KeyListener()
		{
			@Override
			public void keyTyped(KeyEvent e)
			{
				System.out.println("Event on "+name+": "+e);
			}

			@Override
			public void keyPressed(KeyEvent e)
			{
				System.out.println("Event on "+name+": "+e);
			}

			@Override
			public void keyReleased(KeyEvent e)
			{
				System.out.println("Event on "+name+": "+e);
			}
		};		
	}
	
	
}


Mehr Infos gibt's auf How to Use the Focus Subsystem (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features)
 

Robokopp

Bekanntes Mitglied
Ja das hab ich am anfang auch irgendwie festgestellt, als ich in der SideBarklasse eine Hintergrundfarbe eingestellt habe und diese ewig nicht übernommen wurde :D
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Scaling Probleme Spiele- und Multimedia-Programmierung 6
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
J YoutubeAPI Livestream probleme Spiele- und Multimedia-Programmierung 3
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
P Probleme mit VLCJ Spiele- und Multimedia-Programmierung 0
F Probleme bei der Soundwiedergabe Spiele- und Multimedia-Programmierung 0
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F BlueJ Ufospiel Probleme Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
M 2048, 3 kleine Probleme Spiele- und Multimedia-Programmierung 4
A Probleme mit Darstellung von Umgebungen mittels mehrdimensionaler Arrays Spiele- und Multimedia-Programmierung 8
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
J Perfomance Probleme beim eigenen Editor Spiele- und Multimedia-Programmierung 1
K Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 10
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
K Probleme mit .jar Spiele- und Multimedia-Programmierung 12
L Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 3
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
Maxim6394 Probleme bei Sidescroller Spiele- und Multimedia-Programmierung 5
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
B Probleme mit redraw() Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
W Probleme mit Mouselook Spiele- und Multimedia-Programmierung 2
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Steev Probleme mit Kameraausrichtung bei ISO-Map Spiele- und Multimedia-Programmierung 3
R MediaPlayer macht Probleme Spiele- und Multimedia-Programmierung 2
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
P probleme mit key event Spiele- und Multimedia-Programmierung 11
T Bekanntes Heli Spiel -> Aber Probleme damit Spiele- und Multimedia-Programmierung 30
S Probleme mit Thread beim Streaming Spiele- und Multimedia-Programmierung 1
O Ampel - Probleme mit der Farbgebung Spiele- und Multimedia-Programmierung 16
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
P Probleme mit Wolkenbewegung Spiele- und Multimedia-Programmierung 5
W Probleme mit dem setTextureCoordinate Spiele- und Multimedia-Programmierung 3
D Probleme beim Download von GIF-Bildern Spiele- und Multimedia-Programmierung 4
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
D Probleme bei ATI Karten bekannt? Spiele- und Multimedia-Programmierung 4
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
X Probleme. Spiele- und Multimedia-Programmierung 2
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
F Probleme mit selbsterstelltem transparenten PNG Spiele- und Multimedia-Programmierung 5
S probleme mit material Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
D Gomoku --- Probleme bei Instanzierung Spiele- und Multimedia-Programmierung 2
G Probleme beim installieren java 3d linux Spiele- und Multimedia-Programmierung 4
G Sound Probleme Spiele- und Multimedia-Programmierung 2
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
N Probleme mit View Spiele- und Multimedia-Programmierung 3
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
M JPanel mit Graphics2D Objekten mit JScrollpane Spiele- und Multimedia-Programmierung 6
K JPanel wechseln & Neu starten - SnakeSpiel Spiele- und Multimedia-Programmierung 2
A paintComponent in JPanel in JFrame Spiele- und Multimedia-Programmierung 7
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
S Thread und jpanel-paintcomponent kombinierbar?? Spiele- und Multimedia-Programmierung 14
E Animiertes JPanel dynamisch wechseln Spiele- und Multimedia-Programmierung 3
W Panel/JPAnel createImage() Exception Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
C 2D Sprites an die JPanel Größe (Auflösung) anpassen/skalieren Spiele- und Multimedia-Programmierung 3
F Vektorgrafik in JPanel Spiele- und Multimedia-Programmierung 5
E Active Rendering im FSEM auf ein JPanel? Spiele- und Multimedia-Programmierung 4
L 2D-Spiele ruckeln auf JPanel Spiele- und Multimedia-Programmierung 7
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
X JPanel dynamisch (Koordinatensystem)? Spiele- und Multimedia-Programmierung 30
M Jpanel Graphik speichern Spiele- und Multimedia-Programmierung 6
DamienX Canvas vs JPanel Spiele- und Multimedia-Programmierung 15
S Problem mit JPanel bzw p a i n t Spiele- und Multimedia-Programmierung 6
K stringWidth bei Graphics von JPanel und Printer unterschiedl Spiele- und Multimedia-Programmierung 4
R SimpleUniverse in JPanel Spiele- und Multimedia-Programmierung 4
M 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel Spiele- und Multimedia-Programmierung 4
M Jpanel mit Keylistener Spiele- und Multimedia-Programmierung 6
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben