ProgrammierHilfe dringend gesucht ( Icon bewegen)

Diskutiere ProgrammierHilfe dringend gesucht ( Icon bewegen) im Java Basics - Anfänger-Themen Bereich.
S

SystemExit

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class IconBewegtSich extends JFrame {
  private JLabel LabelFigur1 = new JLabel();
  private ImageIcon LabelFigur1Icon = new ImageIcon(getClass().getResource("images/FigurEins.png"));
 
  public IconBewegtSich() {
    super("IconBewegtSich");
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 295;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // start components   
    LabelFigur1.setBounds(88, 48, 81, 65);
    LabelFigur1.setText("");
    LabelFigur1.setIcon(LabelFigur1Icon);
    cp.add(LabelFigur1);
    // end components
    setVisible(true);
  }
    
  public static void main(String[] args) {
    new IconBewegtSich();
  }
 
 
    public void keyTyped(KeyEvent e) {
    }
 
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
              LabelFigur1.setLocation(LabelFigur1.getLocation().x +5, LabelFigur1.getLocation().y);
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT){
            LabelFigur1.setLocation(LabelFigur1.getLocation().x -5, LabelFigur1.getLocation().y);
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            LabelFigur1.setLocation(LabelFigur1.getLocation().x, LabelFigur1.getLocation().y+5);
        } else if(e.getKeyCode() == KeyEvent.VK_UP) {
            LabelFigur1.setLocation(LabelFigur1.getLocation().x, LabelFigur1.getLocation().y -5);
        }
    }
 

    public void keyReleased(KeyEvent e) {
    }
 
 
  // end methods
} // end of class IconBewegtSich



Ich möchte ein jLabel auf Knopfdruck beliebeig bewegen. Der Code hat keine "fehler", aber mein Label bewegt sich nicht.
 
T

Tobias-nrw

Wohin möchtest du es denn bewegen? Eigentlich wäre dafür drawString besser geeignet.
;)
 
S

SystemExit

Also wenn ich auf dem Pfeil nach rechts dann nach rechts und so weiter. Also entweder: oben unten links rechts.
 
J

JustNobody

Also nur weil Du in einer Klasse eine Methode schreibst, wird diese doch noch nicht aufgerufen. Deine Methode keyPressed wird nie aufgerufen, daher tut sich da auch nichts.

Wenn Deine Klasse auch ein KeyListener sein soll, dann musst Du das der Klasse erst einmal sagen: "implements KeyListener".

Und dann musst Du dem Frame sagen, dass die Instanz der KeyListener ist. Also im Konstruktor noch ein "addKeyListener(this);".
 
S

SystemExit

Also nur weil Du in einer Klasse eine Methode schreibst, wird diese doch noch nicht aufgerufen. Deine Methode keyPressed wird nie aufgerufen, daher tut sich da auch nichts.

Wenn Deine Klasse auch ein KeyListener sein soll, dann musst Du das der Klasse erst einmal sagen: "implements KeyListener".

Und dann musst Du dem Frame sagen, dass die Instanz der KeyListener ist. Also im Konstruktor noch ein "addKeyListener(this);".

Könntest du bitte mir deine verbesserte Version, ohne meinen Code gross zuverändern ( Also damit ich verstehe, was du gemacht hast) hier schicken? Wäre sehr hilfreich direkt an einem Beispiel zulernen. ;=)


Und ich wollte alles in einer Klasse schreiben. geht das?
 
J

JustNobody

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

// Hier das implements KeyListener:
public class IconBewegtSich extends JFrame implements KeyListener {
  private JLabel LabelFigur1 = new JLabel();
  private ImageIcon LabelFigur1Icon = new ImageIcon(getClass().getResource("images/FigurEins.png"));
 
  public IconBewegtSich() {
    super("IconBewegtSich");
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 295;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // start components   
    LabelFigur1.setBounds(88, 48, 81, 65);
    LabelFigur1.setText("");
    LabelFigur1.setIcon(LabelFigur1Icon);
    cp.add(LabelFigur1);
    // Hier das Hinzufügen des KeyListeners.
    this.addKeyListener(this);
    // end components
    setVisible(true);
  }
    
  public static void main(String[] args) {
    new IconBewegtSich();
  }
 
 
    public void keyTyped(KeyEvent e) {
    }
 
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
              LabelFigur1.setLocation(LabelFigur1.getLocation().x +5, LabelFigur1.getLocation().y);
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT){
            LabelFigur1.setLocation(LabelFigur1.getLocation().x -5, LabelFigur1.getLocation().y);
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            LabelFigur1.setLocation(LabelFigur1.getLocation().x, LabelFigur1.getLocation().y+5);
        } else if(e.getKeyCode() == KeyEvent.VK_UP) {
            LabelFigur1.setLocation(LabelFigur1.getLocation().x, LabelFigur1.getLocation().y -5);
        }
    }
 

    public void keyReleased(KeyEvent e) {
    }
 
 
  // end methods
} // end of class IconBewegtSich
Du hast die Kommentare, wo ich das Beschriebene eingefügt habe.

Ausführliche Erläuterung:
Es gibt sogenannte KeyListener. Das sind Instanzen, die das Interface KeyListener implementieren. Zum Implementieren gehört a) das "implements", das klar sagt: Ich stelle dieses Interface bereit. Und b) dann natürlich die Methoden, die von dem Interface gefordert werden. (Diese hattest Du schon in Deinem Code drin.)

Wenn Du so einen KeyListener hast (In Deinem Fall ist die Instanz von IconBewegtSicht nun auch ein KeyListener), dann kannst Du diesen KeyListener an das Frame geben. Dann weiß das Frame: Wenn eine Taste gedrückt wurde, dann soll ich der Instanz Bescheid sagen.

Das fehlte auch in Deinem Code.

Das ist die übliche Lösung für sowas - das Frame bietet Events an und dann gibt es EventListener, die darauf hören. Relativ unspektakulär.
 
S

SystemExit

Noch eine Frage
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

// Hier das implements KeyListener:
public class IconBewegtSich extends JFrame implements KeyListener {
  private JLabel LabelFigur1 = new JLabel();
  private ImageIcon LabelFigur1Icon = new ImageIcon(getClass().getResource("images/FigurEins.png"));

  public IconBewegtSich() {
    super("IconBewegtSich");
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 295;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // start components  
    LabelFigur1.setBounds(88, 48, 81, 65);
    LabelFigur1.setText("");
    LabelFigur1.setIcon(LabelFigur1Icon);
    cp.add(LabelFigur1);
    // Hier das Hinzufügen des KeyListeners.
    this.addKeyListener(this);
    // end components
    setVisible(true);
  }
   
  public static void main(String[] args) {
    new IconBewegtSich();
  }


    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
              LabelFigur1.setLocation(LabelFigur1.getLocation().x +5, LabelFigur1.getLocation().y);
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT){
            LabelFigur1.setLocation(LabelFigur1.getLocation().x -5, LabelFigur1.getLocation().y);
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            LabelFigur1.setLocation(LabelFigur1.getLocation().x, LabelFigur1.getLocation().y+5);
        } else if(e.getKeyCode() == KeyEvent.VK_UP) {
            LabelFigur1.setLocation(LabelFigur1.getLocation().x, LabelFigur1.getLocation().y -5);
        }
    }


    public void keyReleased(KeyEvent e) {
    }


  // end methods
} // end of class IconBewegtSich
Du hast die Kommentare, wo ich das Beschriebene eingefügt habe.

Ausführliche Erläuterung:
Es gibt sogenannte KeyListener. Das sind Instanzen, die das Interface KeyListener implementieren. Zum Implementieren gehört a) das "implements", das klar sagt: Ich stelle dieses Interface bereit. Und b) dann natürlich die Methoden, die von dem Interface gefordert werden. (Diese hattest Du schon in Deinem Code drin.)

Wenn Du so einen KeyListener hast (In Deinem Fall ist die Instanz von IconBewegtSicht nun auch ein KeyListener), dann kannst Du diesen KeyListener an das Frame geben. Dann weiß das Frame: Wenn eine Taste gedrückt wurde, dann soll ich der Instanz Bescheid sagen.

Das fehlte auch in Deinem Code.

Das ist die übliche Lösung für sowas - das Frame bietet Events an und dann gibt es EventListener, die darauf hören. Relativ unspektakulär.

Noch eine kleine Frage ;

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class IconBewegung extends JFrame implements KeyListener {
  private JLabel LabelFigur = new JLabel();
  private ImageIcon LabelFigurIcon = new ImageIcon(getClass().getResource("images/FigurEins.png"));
  private JLabel LabelGegner = new JLabel();
  private ImageIcon LabelGegnerIcon = new ImageIcon(getClass().getResource("images/Gegner1.png"));
 
  public IconBewegung() {
    super("IconBewegung");
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 300;
    int frameHeight = 296;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(true);
    Container cp = getContentPane();
    cp.setLayout(null);
    // start components
    LabelFigur.setBounds(32, 96, 81, 65);
    LabelFigur.setText("");
    LabelFigur.setIcon(LabelFigurIcon);
    cp.add(LabelFigur);
    this.addKeyListener(this);
    LabelGegner.setBounds(176, 48, 81, 65);
    LabelGegner.setText("");
    LabelGegner.setIcon(LabelGegnerIcon);
    cp.add(LabelGegner);
    // end components
    setVisible(true);
  }
 
  public static void main(String[] args) {
    new IconBewegung();
  }
 
 
   public void keyTyped(KeyEvent e) {
    }
 
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            LabelFigur.setLocation(LabelFigur.getLocation().x +1, LabelFigur.getLocation().y);
            Gegner();
            ZeigeMirDieLocation();
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT){
            LabelFigur.setLocation(LabelFigur.getLocation().x -1, LabelFigur.getLocation().y);
            Gegner();
            ZeigeMirDieLocation();
        } else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            LabelFigur.setLocation(LabelFigur.getLocation().x, LabelFigur.getLocation().y+1);
            Gegner();
            ZeigeMirDieLocation();
        } else if(e.getKeyCode() == KeyEvent.VK_UP) {
            LabelFigur.setLocation(LabelFigur.getLocation().x, LabelFigur.getLocation().y -1);
            Gegner();
            ZeigeMirDieLocation();
        }
    }
 

    public void keyReleased(KeyEvent e) {
    }
 
    public void Gegner() {
     if (LabelFigur.getLocation() == LabelGegner.getLocation()) {
      System.exit(0);
     }
    }
 
  public void ZeigeMirDieLocation() {
    System.out.println(LabelFigur.getLocation());
    System.out.println(LabelGegner.getLocation());
  }
 
 
  // end methods
} // end of class IconBewegung



Also ich habe jetzt einen Gegner, der sich nicht bewegt. Wenn meine Figur die exakte Location vom gegner hat, dann soll Gegner(); ausgeführt werden, ich kontrolliere das mit ZeigeMirDieLocation, aber wenn die Location genau gleich ist, wird Gegner(); trotdem nicht ausgeführt, woran liegt das?
 
Thema: 

ProgrammierHilfe dringend gesucht ( Icon bewegen)

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben