• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

JFrame während einer Schleife aktualisieren (Java)

stromij

Neues Mitglied
Hallo Experten!

Ich bin gerade dabei ein Programm zu schreiben, was im Vollbildmodus läuft. Diese Programm soll einfach einen Würfel (2D) durch Pfeiltasteneingaben hin und her verschieben. Jetzt habe ich nach einiger Recherche schon das mit dem Vollbild hinbekommen, jedoch das mit den Tasten nicht.

Gibt es eine Möglichkeit das ganze einfach zu lösen? Hier mein Programm bis jetzt:

Code:
package testpackage;
 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;

import javax.swing.JFrame;


public class Test2 extends JFrame {
    private static final long serialVersionUID = 1L;

    public Integer x=10;
    public Integer y=10;
    public Dimension groesse;
    
    public Test2() {
        setUndecorated(true);
 GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this); 
        groesse=getSize();
    }

    
    public void paint(Graphics g){
              g.setColor(Color.yellow);                                        
            g.fillRect(0,0,groesse.width,groesse.height);                                        
            g.setColor(Color.black);                                        
             g.drawLine(x+30,y,x+90,y);
            g.drawLine(x+90,y+60,x+90,y);
            g.drawLine(x+90,y+60,x+60,y+90);
            g.drawLine(x+90,y,x+60,y+30);
            g.drawLine(x+30,y,x,y+30);
            g.drawRect(x,y+30,60,60);
    }
      
 
    public static void main(String[] args) {
        new Test2();
        
    }
 
}

Hat einer von euch eine Idee wie man den Würfel bewegt/Verbesserungsvorschläge für das jetzt bestehende Programm?

Vielen Dank im Vorraus!
Stromi
 
Ja, dessen bin ich mir bewusst. Ich weiß jedoch nicht an welche Stelle, denn in dem Beispiel von der Internetseite steht was von

typingArea = new JTextField(20);
typingArea.addKeyListener(this);

Problem: Ich lege ja ein solches Textfeld nicht an. Ich stelle mich wohl etwas nass an, aber ich steh gerade vöölig auf dem Schlauch :-(
 
Ich denke, du müsstest einfach das Interface implementieren, also:

Code:
public class Test2 extends JFrame implements KeyListener
 
Ahh! Danke. Ich hab noch ein bisschen recherchiert und bin zu einer meiner Ansicht nach ganz guten lösung gekommen:
Code:
package testpackage;
 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;


public class Test2 extends JFrame implements KeyListener{
    private static final long serialVersionUID = 1L;

    public Integer x=10;
    public Integer y=10;
    public Dimension groesse;
    
    public Test2() {
        setUndecorated(true);                                                                                                
        setFocusable(true);
        setVisible(true);
        addKeyListener( this );
        GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this);                
        groesse=getSize();
    }
    
    public void keyReleased(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {

    }

    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {
            case KeyEvent.VK_DOWN:
                    if (y+91!=groesse.height) {y += 1;}
                  break;
                case KeyEvent.VK_UP:
                    if (y!=0) {y -= 1;}
                  break;
                case KeyEvent.VK_LEFT:
                  if(x!=0) {x -= 1;}
                  break;
                case KeyEvent.VK_RIGHT:
                  if(x+91!=groesse.width) {x += 1;}
                  break;
                default:
        
                }
                repaint();
    }
    
    public void paint(Graphics g){
              g.setColor(Color.yellow);                                        
            g.fillRect(0,0,groesse.width,groesse.height);                                       
            g.setColor(Color.black);                                        
             g.drawLine(x+30,y,x+90,y);
            g.drawLine(x+90,y+60,x+90,y);
            g.drawLine(x+90,y+60,x+60,y+90);
            g.drawLine(x+90,y,x+60,y+30);
            g.drawLine(x+30,y,x,y+30);
            g.drawRect(x,y+30,60,60);

    }
      
 
    public static void main(String[] args) {
        new Test2();
        
    }
 
}
Also, vielen Dank für die Hilfe mermshaus
 
Zurück
Oben