KeyListener funktioniert nicht

Hag2bard

Bekanntes Mitglied
Hallo,

ich bins mal wieder, es geht wieder um mein Pokemon Spiel.
Ich möchte einen Key Listener benutzen, aber dieser funktioniert nicht.
Hier meine Klassen:

[CODE lang="java" title="Klasse PokeEditor2"]package pokemon;

import javafx.scene.layout.TilePane;

import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class PokeEditor2 implements KeyListener {

private int tilePanelSelectedX = -1;
private int tilePanelSelectedY = -1;
private String filename = "tileset-advance.png";
JScrollPane tileJScrollPane;
TilePanel tilePanel;
MapPanel mapPanel;
private final int tilesize = 16;

public PokeEditor2() {

JFrame mapCreator = new JFrame("Pokemap-Creator");
mapCreator.setLayout(null);

this.tilePanel = new TilePanel(this);
this.tilePanel.addMouseListener(tilePanel);
this.tilePanel.addKeyListener(this);
this.tilePanel.setFocusable(true);
this.tilePanelSelectedX = tilePanel.getSelectedX();
this.tilePanelSelectedY = tilePanel.getSelectedY();

this.mapPanel = new MapPanel(this.tilePanelSelectedX, this.tilePanelSelectedY, this);
this.mapPanel.addMouseListener(mapPanel);
this.mapPanel.addKeyListener(this);
this.mapPanel.setFocusable(true);
this.mapPanel.setBounds(0, 0, 84*tilesize, 50*tilesize);

tileJScrollPane = new JScrollPane(tilePanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
tileJScrollPane.addKeyListener(this);
tileJScrollPane.setBounds(1387, 0, 150, 800);
tileJScrollPane.getVerticalScrollBar().setUnitIncrement(20);
tileJScrollPane.setFocusable(true);


mapCreator.add(tileJScrollPane);
mapCreator.add(mapPanel);
mapCreator.addKeyListener(this);

mapCreator.pack();
mapCreator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mapCreator.setVisible(true);

mapCreator.setSize(1500, 860);
mapCreator.setLocationRelativeTo(null);
mapCreator.setExtendedState(JFrame.MAXIMIZED_BOTH);

}

private void getAndSet(TilePanel tilePanel, MapPanel mapPanel) {
this.tilePanelSelectedX = tilePanel.getSelectedX();
this.tilePanelSelectedY = tilePanel.getSelectedY();
mapPanel.setTilePanelSelectedX(this.tilePanelSelectedX);
mapPanel.setTilePanelSelectedY(this.tilePanelSelectedY);
}

public void runGetandSet() {
getAndSet(tilePanel, mapPanel);
}


@Override
public void keyTyped(KeyEvent e) {
int key = e.getKeyCode();

if (key == KeyEvent.VK_LEFT) {
System.out.println("LINKS");
}
if (key == KeyEvent.VK_RIGHT) {
System.out.println("RECHTS");
}
if (key == KeyEvent.VK_UP) {
System.out.println("HOCH");
}
if (key == KeyEvent.VK_DOWN) {
System.out.println("RUNTER");
}
}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {

}
}
[/CODE]

[CODE lang="java" title="Klasse TilePanel"]package pokemon;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

public class TilePanel extends JPanel implements MouseListener, KeyListener {

private final PokeEditor2 pokeEditor2;
private int selectedX = -1;
private int selectedY = -1;
private int preSelectedX = -1;
private int preSelectedY = -1;
private int tilesize = 16;
private String filename = "tileset-advance.png";
private BufferedImage tilesetBufferedImage;

public TilePanel(PokeEditor2 pokeEditor2) {
this.pokeEditor2 = pokeEditor2;
try {
loadBufferedImage();
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
pokeEditor2.runGetandSet();
g.drawImage(tilesetBufferedImage, 0, 0, 128, 15971, null);
if (selectedX != -1 && selectedY != -1) {
g.setColor(Color.RED);
g.drawRect(selectedX * tilesize, selectedY * tilesize, tilesize, tilesize);
}
}

private void loadBufferedImage() throws IOException {
// tilesetBufferedImage = ImageIO.read(getClass().getResourceAsStream("filename"));
tilesetBufferedImage = ImageIO.read(getClass().getResource(filename));
}

@Override
public void mouseClicked(MouseEvent e) {
if (selectedX != -1 && selectedY != -1) {
preSelectedX = selectedX;
preSelectedY = selectedY;
}
selectedX = e.getPoint().x;
selectedY = e.getPoint().y;
selectedX = selectedX / 16;
selectedY = selectedY / 16;
repaint(); //Problem!!!!
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

public int getSelectedX() {
return selectedX;
}

public int getSelectedY() {
return selectedY;
}

@Override
public void keyTyped(KeyEvent e) {

int key = e.getKeyCode();

if (key == KeyEvent.VK_LEFT) {
System.out.println("LINKS");
}
if (key == KeyEvent.VK_RIGHT) {
System.out.println("RECHTS");
}
if (key == KeyEvent.VK_UP) {
System.out.println("HOCH");
}
if (key == KeyEvent.VK_DOWN) {
System.out.println("RUNTER");
}
}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {

}
}[/CODE]

[CODE lang="java" title="Klasse MapPanel"]package pokemon;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;

public class MapPanel extends JPanel implements MouseListener, KeyListener {
private final PokeEditor2 pokeEditor2;
private int selectedX = -1;
private int selectedY = -1;
private int preSelectedX = -1;
private int preSelectedY = -1;
private final int TILESIZE = 16;
private final int ZOOM = 2;
private String filename = "tileset-advance.png";
private BufferedImage tilesetBufferedImage;
private int repainted = 0;
private int tilePanelSelectedX = -1;
private int tilePanelSelectedY = -1;
private ArrayList<Block> map1 = new ArrayList<>();

public MapPanel(int tilePanelSelectedX, int tilePanelSelectedY, PokeEditor2 pokeEditor2) {
this.pokeEditor2 = pokeEditor2;
this.tilePanelSelectedX = tilePanelSelectedX;
this.tilePanelSelectedY = tilePanelSelectedY;
try {
loadBufferedImage();
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (this.tilePanelSelectedX != -1 && this.tilePanelSelectedY != -1) {
if (selectedX != -1 && selectedY != -1) {
for (int i = 0; i < map1.size(); i++) {
g.drawImage(tilesetBufferedImage, map1.get(i).getDestinationX() * TILESIZE * ZOOM, map1.get(i).getDestinationY() * TILESIZE * ZOOM, (map1.get(i).getDestinationX() + 1) * TILESIZE * ZOOM, (map1.get(i).getDestinationY() + 1) * TILESIZE * ZOOM, map1.get(i).getSourceX() * TILESIZE, map1.get(i).getSourceY() * TILESIZE, (map1.get(i).getSourceX() + 1) * TILESIZE, (map1.get(i).getSourceY() + 1) * TILESIZE, null); // Das muss geändert werden, soll wo anders gezeichnet werden
}
}
}
}

@Override
public void mouseClicked(MouseEvent e) {
if (selectedX != -1 && selectedY != -1) {
preSelectedX = selectedX;
preSelectedY = selectedY;
}
selectedX = e.getPoint().x;
selectedY = e.getPoint().y;
selectedX = selectedX / (16 * ZOOM);
selectedY = selectedY / (16 * ZOOM);
pokeEditor2.runGetandSet();
map1.add(new Block(this.tilePanelSelectedX, this.tilePanelSelectedY, selectedX, selectedY));
repaint();
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

private void loadBufferedImage() throws IOException {
//tilesetBufferedImage = ImageIO.read(getClass().getResourceAsStream(filename));
tilesetBufferedImage = ImageIO.read(getClass().getResource(filename));
}

public void setTilePanelSelectedX(int tilePanelSelectedX) {
this.tilePanelSelectedX = tilePanelSelectedX;
}

public void setTilePanelSelectedY(int tilePanelSelectedY) {
this.tilePanelSelectedY = tilePanelSelectedY;
}

@Override
public void keyTyped(KeyEvent e) {
int key = e.getKeyCode();

if (key == KeyEvent.VK_LEFT) {
System.out.println("LINKS");
}
if (key == KeyEvent.VK_RIGHT) {
System.out.println("RECHTS");
}
if (key == KeyEvent.VK_UP) {
System.out.println("HOCH");
}
if (key == KeyEvent.VK_DOWN) {
System.out.println("RUNTER");
}
}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {

}
}[/CODE]


Woran liegt das?
Ich hab in allen 3 Klassen einen Keylistener implementiert und nirgends funktioniert er.
VK_LEFT, VK_DOWN, damit sind doch die Pfeiltasten gemeint oder nicht?

Danke im Voraus


EDIT: Ich habs hinbekommen, bitte löschen

KeyPressed hätté ich wählen sollen
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Also, implementieren bringt Dir nichts, so lange Du das Ding nicht registrierst. Registriert wird nur im Fall von PokeEditor2 und zwar die PokeEditor2-Instanz. Außerdem wird keyTyped() nur für druckbare Zeichen ausgelöst, also gerade nicht für Pfeiltasten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
I KeyListener funktioniert nicht! AWT, Swing, JavaFX & SWT 2
A KeyListener funktioniert nicht beim Öffnen von neuem Frame. AWT, Swing, JavaFX & SWT 2
hdi keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
S KeyListener funktioniert nicht erwartungsgemäss AWT, Swing, JavaFX & SWT 5
G KeyListener funktioniert nur einmal 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
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
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
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
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
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
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
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
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
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

Ähnliche Java Themen

Neue Themen


Oben