Java mehrfaches verschieben eines Objekts über Tastendruck nicht möglich?!

...komplette Frage anzeigen

3 Antworten

Die Positionsvariablen müssen in die Instanz, nicht lokal in die Methode, sonst werden die bei jedem Aufruf zurückgesetzt.

davidschwarz 04.07.2013, 20:07

Wo und was ist die Instanz? Bin noch nicht so weit :D Besser gesagt wie würdest du das lösen? Weil ich nehme mal an die Instanz ist das aüßere also was nur unter public static void main Klammern steht

0
freejack75 04.07.2013, 20:57
@davidschwarz

Unter die Zeile new KeyListener müsste schon gehen.

Auf Sicht würde ich jedoch ein ganz eigenes Objekt machen, der KeyListener ist ja nur eine anonyme Klasse.

0

ok habe es jetzt hinbekommen indem ich dir Variable einfach unter

frame.addKeyListener(new KeyListener() {

gesetzt habe. Hat jemand ne Ahnung wie ich machen kann, das es nicht an einem anderen Objekt angrenzen darf? Also sprich: Das ich da jetzt noch ein Objekt wie eine Mauer oder soetwas hinzufüge, und, dass das panel nicht dieses Objekt berühren kann sondern dann eindach stoppt?

PerfectMuffin 05.07.2013, 19:15

Sache der Umgebung - Sache der Engine - deine Sache.

0

ok hier der verbesserte Quelltext:

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Timer; import java.util.TimerTask;

import javax.swing.*;

public class blup {

public static void main(String[] args) {
    final JFrame frame = new JFrame("Spiel");
    frame.getContentPane().setForeground(Color.WHITE);
    frame.getContentPane().setBackground(Color.RED);
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    frame.setVisible(true);

    final int a = 63;
    final int b = 189;
    final int c = 37;
    final int d = 15;
    final int x = 150;
    final int f = 40;
    final int g = 37;
    final int h = 15;
    final JPanel panel = new JPanel();
    panel.setBackground(Color.ORANGE);
    panel.setBounds(a, b, c, d);
    frame.getContentPane().add(panel);
    final JPanel panel2 = new JPanel();
    panel2.setBackground(Color.cyan);
    panel2.setBounds(x, f, g, h);
    frame.getContentPane().add(panel2);

    frame.addKeyListener(new KeyListener() {
        int a = 63; //left 
        int b = 189;//top
        int c = 37; //width
        int d = 15; //height

        int x = 150;
        int f = 40;
        int g = 37;
        int h = 15;

        public void keyPressed(KeyEvent e) {  
            System.out.println(e.getKeyChar() + " pressed");
            panel.setBounds(a, b, c, d);
            panel.setVisible(true);
            char ch;
            ch = e.getKeyChar();
            if (ch == 'd') {
                a = a + 5;

                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 'D') {
                a = a + 5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 's') {
                b = b + 5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 'S') {
                b = b+5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 'a') {
                a = a - 5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 'A') {
                a = a-5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 'w') {
                b = b - 5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if (ch == 'W') {
                b = b - 5;
                panel.setBounds(a, b, c, d);
                panel.setVisible(true); 
            }
            if(((a > 109)&&(a < 187))&&((b > 25)&&(b < 55))){ //zuerst wird left überprüft dann top
                JOptionPane.showMessageDialog(null,"Sie haben das Rechteck berührt!");
                a = 63; 
                b = 189;
                c = 37; 
                d = 15;
                panel.setBounds(a, b, c, d);
            }
        }
        @Override
        public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub

        }


    }); 

} }

Was möchtest Du wissen?