Keylistener hört auf zu arbeiten

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Guten morgen,

ich habe ein JFrame, darauf liegen zwei panels. Dem fenster habe ich einen keylistener zugewiesen, der auch soweit funktioniert. Nur sobald ich einen Button auf dem zweiten Panel anklicke, hört dieser auf zu arbeiten...warum?
Habe schon setFocusable gemacht, damit es überhaupt läuft.
Mfg
 

Titanpharao

Bekanntes Mitglied
Versteh ich jetzt nicht so ganz...soweit bin ich bisjetzt auszüge...

Code:
public class Window extends JFrame implements KeyListener{

	public Window(Gebietverwaltung gv,Spieler spieler,Buttonloader bl){
		this.setLayout(null);
		this.setResizable(false);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}});
		this.setLocationRelativeTo(null);		
		this.setVisible(true);
		this.addKeyListener(this);
		this.setFocusable(true);

		menu=new Menu(this.bl,spieler,this);
		this.add(menu);


class Menu extends JPanel{	
	public Menu(Buttonloader bl,final Spieler spieler,final Window fenster){
		this.setSize(640,32);
		this.setLayout(null);
		this.setLocation(0, 480);		
		anzeige.setSize(640, 32);
		anzeige.setLocation(0, 0);
		hp=new JProgressBar();
		...weitere Button etc...

Wenn ich jetzt in diesem neuen Panel einen Button klicke, geht mein Keylistener für das Fenster, in dem sich das Panel befindet nicht mehr...
 

The_S

Top Contributor
Dann poste doch mal auch wirklich relevanten Code. Und nicht sowas, was überhaupt nichts mit deinem Problem zu tun hat.

Außerdem:

- Wenn du Klassen so benennst, wie Standardklassen aus dem JDK, kann es leicht zu dummen Verwechslungen kommen, wenn man nicht aufpasst (Window)
- Null-Layout nur dann verwenden, wenn du wirklich weißt, was du da tust
 

Titanpharao

Bekanntes Mitglied
Ok, habe sie mal zu Engine umbenannt. Ja ich weis wie das NullLayout fuktioniert und brauch dies auch. Es macht sich nun mal einfach dumm, bei einem spiel alles in Layoutmanager zu packen, wenn der eine Button 2 bzw der andere 3Pixel weit entfernt sein soll.

Hier mal der große Code, sry für ganzen überflüssigen rest.

Code:
package testworld_IMoY;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.swing.*;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

public class Engine extends JFrame implements KeyListener{
	boolean sound=true;
	boolean run=true;
	Gebietverwaltung gv;
	Buttonloader bl;
	JPanel world=new JPanel();
	Menu menu;
	JLabel player;
	Spieler spieler;
	Music bgm;

	public Engine(Gebietverwaltung gv,Spieler spieler,Buttonloader bl){
		this.gv=gv;
		this.bl=bl;
		this.spieler=spieler;
		this.setTitle("IMoY Test");
		this.setSize(640+4,512+32);
		this.setLayout(null);
		this.setResizable(false);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}});
		this.setLocationRelativeTo(null);		
		this.setVisible(true);
		this.addKeyListener(this);
		this.setFocusable(true);
		world.setSize(640,480);
		world.setLocation(0, 0);
		world.setLayout(null);
		this.add(world);
		menu=new Menu(this.bl,spieler,this);
		this.add(menu);	
	    player=new JLabel(new ImageIcon("testtexture/player.gif")); 
	    player.setSize(32, 32); 
	    player.setLocation(spieler.xposy, spieler.yposy);
		setWorld(gv.aktivgebiet);		
		//addRucksack();
		if(spieler.sound){
		bgm=new Music(getBGM(gv.aktivgebiet));
		bgm.execute();		
		}
	}
		

	
	public void setWorld(int worldnr){//zum begehen, der neuen Welt
		sound(worldnr,gv.aktivgebiet);
		world.removeAll();
		gv.aktivgebiet=worldnr;
		world.add(player);
		world.add(gv.gebiete.get(worldnr).hintergrund);
		this.repaint();
	}
	   public void keyReleased(KeyEvent ke){ 
	   } 
	   public void keyTyped(KeyEvent ke){ 
	   } 
	   public void keyPressed(KeyEvent ke){ 
	   int key = ke.getKeyCode();	   
	   System.out.println("dekey");
	   if(run){		    
		   switch (key) {
		   	case KeyEvent.VK_RIGHT:laufen(0);break;
		   	case KeyEvent.VK_DOWN:laufen(1);break;
		   	case KeyEvent.VK_LEFT:laufen(2);break;
		   	case KeyEvent.VK_UP:laufen(3);break;
		   	default:break;
		   }
	   }	   
	   } 

package testworld_IMoY;

import javax.swing.*;

import java.awt.Color;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Menu extends JPanel{	
	JLabel anzeige;
	JProgressBar hp,mp;
	Spieler spieler;
	Engine fenster;
	public Menu(Buttonloader bl,final Spieler spieler,final Engine fenster){
		this.fenster=fenster;
		this.spieler=spieler;
		this.setSize(640,32);
		this.setLayout(null);
		this.setLocation(0, 480);		
		switch (spieler.typ) {
		case 0:	anzeige=new JLabel(new ImageIcon("testtexture/menu0.gif"));break;
		case 1: anzeige=new JLabel(new ImageIcon("testtexture/menu1.gif"));break;
		case 2:	break;//TODO^^
		default:break;
		}
		anzeige.setSize(640, 32);
		anzeige.setLocation(0, 0);
		hp=new JProgressBar();
		hp.setValue(spieler.getPercentHP());		
		hp.setSize(75,12);
		hp.setLocation(32, 4);
		hp.setBackground(Color.BLACK);
		hp.setForeground(Color.RED);
		bl.blist.get(0).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				spieler.useHeiltrank();
				hp.setValue(spieler.getPercentHP());					
				}
		});
		mp=new JProgressBar();
		mp.setValue(spieler.getPercentMP());
		mp.setSize(75,12);
		mp.setLocation(32, 18);
		mp.setBackground(Color.BLACK);
		mp.setForeground(Color.BLUE);
		
		JLabel sound=new JLabel("M:");
		sound.setSize(16, 26);
		sound.setLocation(573, 4);
		this.add(sound);
		JCheckBox mute=new JCheckBox();
		if(spieler.sound)mute.setSelected(true);
		mute.setLocation(587, 12);
		mute.setSize(13, 13);
	    ActionListener actionListener = new ActionListener() {
	        public void actionPerformed(ActionEvent actionEvent) {
	          AbstractButton abstractButton = (AbstractButton) actionEvent.getSource();
	          boolean selected = abstractButton.getModel().isSelected();
	          if(selected){
	          spieler.sound=true;
	          fenster.startsoundfrom();
	          }
	          else{
	          spieler.sound=false;  
	          fenster.bgm.p.close();
	          }
	          System.out.println(selected);
	        }
	      };
		mute.addActionListener(actionListener);
		mute.setMargin(new Insets(-2,-2,-2,-2));//Läst die render verschwinden
		this.add(mute);
		this.add(bl.blist.get(0));
		this.add(bl.blist.get(1));
		this.add(bl.blist.get(2));
		this.add(bl.blist.get(3));
		this.add(bl.blist.get(4));
		this.add(bl.blist.get(5));
		this.add(bl.blist.get(6));
		this.add(hp);
		this.add(mp);		
		this.add(anzeige);		
	}
}

So, also das Menu ist das zweite Panel...was komischerweise dann keine eingaben mehr zuläst. Hatte sowas fast genauso schonmal geschrieben, nur das es dort nur ein Panel gab und es funktionierte
:bahnhof:
 

Titanpharao

Bekanntes Mitglied
Glaube ich habe ein oder das Problem.
Wenn ich zum beispiel, einen Button unten anklicke, bleibt der "aktiv" also die Leertaste würde dann zum beispiel denn button betätigen, wie man es aus windows kennt. Erst wenn ich wieder ins oberer Feld reinklicke, dann gehts wieder...
 

Titanpharao

Bekanntes Mitglied
Habe jetzt mal an denn Button denn selben KeyListener dran gehangen.
Code:
bl.blist.get(0).addKeyListener(fenster);

bzw 

bl.blist.get(0).setFocusable(false);

Dann funktionierts für denn Button. Toll...aber es soll fürs ganze Panel gehen...will doch nicht bei jeden Element das dranhängen.
 

The_S

Top Contributor
Ja, das ist genau das, wo ich gesagt habe. Der KeyListener reagiert nur, wenn wirklich die Componente, die er hinzugefügt wurde, den Fokus hat. Entweder allen Componenten den KeyListener zuweisen, eine andere Lösungen suchen, oder den AWTEventListener verwenden.

Auch für dein Vorhaben gibt es sehr mächtige und dafür geeignete LayoutManager!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben