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
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: