paintComponent + KeyListener

blackrose4me

Grünschnabel
Hallöchen zusammen ;)

ich hätte da mal ein Problemchen, indem ich seit gut 2 Tagen nicht weiterkomme...
Es geht u.a. darum, dass ich mittels eines KeyListeners Bilder auf mein JFrame zeichnen möchte, jedoch nur "Step 1" ausgeführt wird, sodass mein JFrame kein Bild anzeigt. Zudem habe ich das Problem, dass wenn ich mehrere Bilder auf das JFrame zeichnen möchte, die zuvorigen überschrieben werden und nur das letzte aufgerufene Bild bestehen bleibt. Und ich frage mich nun warum?

Um euch das zu verdeutlichen, erstmal mein Code:
PHP:
import java.awt.*;
import java.io.File;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.event.KeyEvent.*;
import java.awt.event.KeyListener.*;
import javax.swing.JPanel.*;
import java.lang.String.*;
import java.sql.*;
import javax.swing.JButton.*;

public class Test_v1 extends JFrame implements KeyListener {

  public ViewComponent viewComponent = null;
  public File imageFile = null;

  static String f1 = "figures/1.png";
  static String f2 = "figures/2.png";
  static String f3 = "figures/3.png";
  static String f4 = "figures/4.png";
  static String f5 = "figures/5.png";
  static String f6 = "figures/6.png";
  static String f7 = "figures/7.png";

  public void keyPressed(KeyEvent e) {

    if (e.getKeyCode()==KeyEvent.VK_DOWN)
    {
      System.out.println("down");
      //führt nur "step 1" aus, jedoch nicht "step 2", sodass kein bild auf frame gezeichnet wird
      tester(this.f7, 50, 100);
    }
    if (e.getKeyCode()==KeyEvent.VK_UP)
    {
      System.out.println("up");
    }
    if (e.getKeyCode()==KeyEvent.VK_LEFT)
    {
      System.out.println("left");
    }
    if (e.getKeyCode()==KeyEvent.VK_RIGHT)
    {
      System.out.println("right");
    }
  }
  
  public Test_v1() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    int frameWidth = 261;
    int frameHeight = 515;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;


    //wird überschrieben, bilder sollten aber übereinander gelegt werden
    tester(this.f2,80,150);
    tester(this.f1,150,30);
    tester(this.f6,10,80);

    setFocusable(true);
    setResizable(false);
    setVisible(true);
    setLayout(null);
    addKeyListener(this);
    setLocation(x, y);
  }
  
  public void tester(String zeigeBild, int left, int top){
      imageFile = new File(zeigeBild);
      viewComponent = new ViewComponent(imageFile,left,top);
      this.add(viewComponent);
  }

  public void keyTyped(KeyEvent event) {
  }
  public void keyReleased(KeyEvent event) {
  }
  
  public static void main(String[] args) {
    new Test_v1();
  }
}

nicht zu vergessen:
PHP:
import java.awt.*;
import java.io.File;
import javax.swing.*;

class ViewComponent extends JPanel {
  public Image image;
  public int image_left;
  public int image_top;
  
  public ViewComponent() {
  }

  public ViewComponent(File f,int left, int top) {
    this.setImage(f);
    this.image_left = left;
    this.image_top = top;
  }

  public void setImage(File file) {
    image = Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath());

    if (image != null){
      repaint();
      //drawing.repaint();
      System.out.println("Step 1");
    }
  }

  @Override
  protected void paintComponent(Graphics g) {
    if (image != null){
      g.drawImage(image, image_left, image_top, this);
      System.out.println("Step 2");
    }
  }
}

Würde mich sehr freuen, wenn mir jemand von euch helfen könnte...stehe nämlich ziemlich auf den Schlauch =(

Grüßlö
Jenny
 
Zurück