Hallo zusammen,
Es geht ein Spiel das ich in Java programmiere. Irgendwie funktioniert der KeyListener in diesem Programm nicht. Der ActionListener funktioniert.
Jedoch hat es schonmal funktioniert, aber nur wenn komischerweiße das Frame nicht richtig angezeigt wurde. (Mal wurde es richtig angezeigt, mal nicht --> ohne Veränderung am Quellcode).
Das Programm wurde über MVC realisiert.
[Java]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicArrowButton;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.*;
import java.awt.event.*;
public class View extends JFrame implements ActionListener, Observer, KeyListener {
boolean abfrage=false;
Controller con;
int size;
JButton[][] button;
JPanel panel=new JPanel();
JPanel panel2=new JPanel();
String level= "bb#####b### #b# $ # ### # . ## # ### # #b#@ ###b#####bb";
Container cp=getContentPane();
String wall = "#";
String floor = " ";
String me = "@";
String dollar = "$";
String blank = "b";
String goal = ".";
JButton [] richtung=new JButton[4];
BasicArrowButton [] test=new BasicArrowButton[4];
//Konstruktor
public View(Controller con, int size){
this.size=size;
this.con=con;
button=new JButton[size][size];
for (int i=0; i<size; i++){
for (int j=0; j<size; j++){
button[j]=new JButton(" ");
button[j].setBackground(Color.black);
panel.add(button[j]);
}
}
//Erzeugung des Spielfeldes
for (int i=0; i <size; i++){
for (int j=0; j< size; j++ ){
panel.setLayout(new GridLayout(size, size));
panel.add(button[j]);
}
}
//Erzeugung der Auswahl
int a,b,c,d;
a=SwingConstants.NORTH;
b=SwingConstants.SOUTH;
c=SwingConstants.WEST;
d=SwingConstants.EAST;
test[0]=new BasicArrowButton(a);
test[1]=new BasicArrowButton(c);
test[2]=new BasicArrowButton(d);
test[3]=new BasicArrowButton(b);
for (int i=0; i< test.length;i++){
test.addActionListener(this);
panel2.setLayout(new GridLayout(1, 4));
panel2.add(test);
}
//Für die Anordnung
cp.add(panel, BorderLayout.CENTER);
cp.add(panel2, BorderLayout.SOUTH);
JFrame f = new JFrame("Sokoban");
f.setSize(600, 600);
f.add(cp);
f.addKeyListener(this);
f.setVisible(true);
}
public void keyTyped(KeyEvent a) {
if (a.getKeyCode()== KeyEvent.VK_LEFT){
System.out.println("Test-------------------");
}
}
public void keyPressed(KeyEvent b) {
if (b.getKeyCode()== KeyEvent.VK_LEFT){
System.out.println("Test-------------------");
}
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode()== KeyEvent.VK_LEFT){
System.out.println("Test-------------------");
}
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==test[3]){
con.setRichtung("Unten");
}
if (e.getSource()==test[0]){
con.setRichtung("Oben");
}
if (e.getSource()==test[1]){
con.setRichtung("Links");
}
if (e.getSource()==test[2]){
con.setRichtung("Rechts");
}
}
public void output() {
String c;
for(int i=0;i<size;i++){
for (int j=0; j<size;j++){
c = con.control[j];
if(con.control[j].equals(wall)){
button[j].setBackground(Color.black);
}
if(con.control[j].equals(floor)){
button[j].setBackground(Color.white);
}
if(con.control[j].equals(me)){
button[j].setBackground(Color.red);
}
if(con.control[j].equals(dollar)){
button[j].setBackground(Color.yellow);
}
if(con.control[j].equals(blank)){
button[j].setBackground(Color.black);
}
if(con.control[j].equals(goal)){
button[j].setBackground(Color.green);
}
}
}
}
public void update(Observable o, Object arg){
output();
}
}
[/Java]
Vielleicht liegt es ja irgendwie an der Strukturierung des MVC. Ich komm grad echt net weiter.
Vll habt ihr ja ne Idee.
Vielen Dank im Vorraus.
MFG
aikon3
Es geht ein Spiel das ich in Java programmiere. Irgendwie funktioniert der KeyListener in diesem Programm nicht. Der ActionListener funktioniert.
Jedoch hat es schonmal funktioniert, aber nur wenn komischerweiße das Frame nicht richtig angezeigt wurde. (Mal wurde es richtig angezeigt, mal nicht --> ohne Veränderung am Quellcode).
Das Programm wurde über MVC realisiert.
[Java]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicArrowButton;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.*;
import java.awt.event.*;
public class View extends JFrame implements ActionListener, Observer, KeyListener {
boolean abfrage=false;
Controller con;
int size;
JButton[][] button;
JPanel panel=new JPanel();
JPanel panel2=new JPanel();
String level= "bb#####b### #b# $ # ### # . ## # ### # #b#@ ###b#####bb";
Container cp=getContentPane();
String wall = "#";
String floor = " ";
String me = "@";
String dollar = "$";
String blank = "b";
String goal = ".";
JButton [] richtung=new JButton[4];
BasicArrowButton [] test=new BasicArrowButton[4];
//Konstruktor
public View(Controller con, int size){
this.size=size;
this.con=con;
button=new JButton[size][size];
for (int i=0; i<size; i++){
for (int j=0; j<size; j++){
button[j]=new JButton(" ");
button[j].setBackground(Color.black);
panel.add(button[j]);
}
}
//Erzeugung des Spielfeldes
for (int i=0; i <size; i++){
for (int j=0; j< size; j++ ){
panel.setLayout(new GridLayout(size, size));
panel.add(button[j]);
}
}
//Erzeugung der Auswahl
int a,b,c,d;
a=SwingConstants.NORTH;
b=SwingConstants.SOUTH;
c=SwingConstants.WEST;
d=SwingConstants.EAST;
test[0]=new BasicArrowButton(a);
test[1]=new BasicArrowButton(c);
test[2]=new BasicArrowButton(d);
test[3]=new BasicArrowButton(b);
for (int i=0; i< test.length;i++){
test.addActionListener(this);
panel2.setLayout(new GridLayout(1, 4));
panel2.add(test);
}
//Für die Anordnung
cp.add(panel, BorderLayout.CENTER);
cp.add(panel2, BorderLayout.SOUTH);
JFrame f = new JFrame("Sokoban");
f.setSize(600, 600);
f.add(cp);
f.addKeyListener(this);
f.setVisible(true);
}
public void keyTyped(KeyEvent a) {
if (a.getKeyCode()== KeyEvent.VK_LEFT){
System.out.println("Test-------------------");
}
}
public void keyPressed(KeyEvent b) {
if (b.getKeyCode()== KeyEvent.VK_LEFT){
System.out.println("Test-------------------");
}
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode()== KeyEvent.VK_LEFT){
System.out.println("Test-------------------");
}
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==test[3]){
con.setRichtung("Unten");
}
if (e.getSource()==test[0]){
con.setRichtung("Oben");
}
if (e.getSource()==test[1]){
con.setRichtung("Links");
}
if (e.getSource()==test[2]){
con.setRichtung("Rechts");
}
}
public void output() {
String c;
for(int i=0;i<size;i++){
for (int j=0; j<size;j++){
c = con.control[j];
if(con.control[j].equals(wall)){
button[j].setBackground(Color.black);
}
if(con.control[j].equals(floor)){
button[j].setBackground(Color.white);
}
if(con.control[j].equals(me)){
button[j].setBackground(Color.red);
}
if(con.control[j].equals(dollar)){
button[j].setBackground(Color.yellow);
}
if(con.control[j].equals(blank)){
button[j].setBackground(Color.black);
}
if(con.control[j].equals(goal)){
button[j].setBackground(Color.green);
}
}
}
}
public void update(Observable o, Object arg){
output();
}
}
[/Java]
Vielleicht liegt es ja irgendwie an der Strukturierung des MVC. Ich komm grad echt net weiter.
Vll habt ihr ja ne Idee.
Vielen Dank im Vorraus.
MFG
aikon3
Zuletzt bearbeitet: