Antwort schreiben  Thema schreiben 
Verfasser Nachricht
~MaX~
Profi
****


Beiträge: 252
Gruppe: User
Registriert seit: Dec 2010

Status: Offline
Danke erhalten: 112
Beitrag: #1
xGames  Java: Frage zum Focus System

Hey Leute,

Ich hab eine Frage zum Focus System in Java:

Ich nutze NetBeans und erzeuge mit dem UI Designer ein JFrame, auf dem ein JPanel ist. In diesem JPanel befindet sich ein JPanel, das ich mit den Pfeiltasten bewegen möchte.

Code:
public void movelabel ()
    {
        player.addKeyListener(new KeyAdapter()
             {
                
                 @Override
             public void keyPressed(KeyEvent ke)
                 {
                 if(ke.getKeyCode() == KeyEvent.VK_DOWN)
                     {
                     player.setLocation(player.getX(),player.getY()+1);
                     repaint();
                 }
                 if(ke.getKeyCode() == KeyEvent.VK_UP)
                     {
                     player.setLocation(player.getX(),player.getY()-1);
                     repaint();
                 }
                 if(ke.getKeyCode() == KeyEvent.VK_LEFT)
                     {
                     player.setLocation(player.getX()-1,player.getY());
                     repaint();
                 }
                 if(ke.getKeyCode() == KeyEvent.VK_RIGHT)
                     {
                     player.setLocation(player.getX()+1,player.getY());
                     repaint();
                 }
             }
         });
    }

Im Moment wird jedoch nicht auf die Pfeiltasten reagiert und wenn ich es richtig verstanden habe, muss ich auf der richtigen komponente den focus setzten. Mein Problem ist ich weiß weder welche komponente nun den focus braucht(jpanel oder jlabel) noch weiß ich an welcher stelle im code ich den focus jetzt requesten soll.

wäre echt cool wenn mir jemand das erklären kann

MfG

25.11.2013 16:41
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Rroia
Profi
****


Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010

Status: Offline
Danke erhalten: 173
Beitrag: #2
xGames  RE: Java: Frage zum Focus System

Es ist schon ein wenig her, dass ich mich mit Swing beschäftigt habe, aber wenn ich es noch richtig weiß muss der Focus auf der Komponente liegen, die den KeyListener an sich gebunden hat. In diesem Fall sollte das also player sein, vermutlich dein inneres JPanel.

Das Problem dabei ist, dass sobald außerhalb von diesem JPanel ein Feld angeklickt wird der Focus natürlich schon wieder verloren ist und neu angefordert werden muss. Besser sollte es funktionieren, wenn du eine möglichst große Fläche mit dem KeyListener abdeckst, am besten das ganze Fenster. Dann brauchst du nur einmal im Konstruktor - oder einer init Methode - den Focus und den Listener setzten.

Und eine Sache zu deinem KeyListener noch, mit der Switch Funktion lässt sich das deutlich einfach lösen Wink. Sollte auch schneller laufen, als das, was du zur Zeit geschrieben hast, auch wenn es wahrscheinlich keinen Unterschied für dich macht.

Code:
keyPressed {
      switch(getKeyCode()) {
             case DOWN:
                     setLocation();
                     break;
             case UP:
                     setLocation();
                     break;
             case RIGHT:
                     setLocation();
                     break;
             case LEFT:
                     setLocation();
                     break;
      }
      repaint();
}


In etwa so

25.11.2013 17:46
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
~MaX~ (Nov-25-2013)
laughingMan
News-Writer
**


Beiträge: 5.220
Gruppe: User
Registriert seit: Oct 2011

Status: Offline
Danke erhalten: 2363
Beitrag: #3
xGames  RE: Java: Frage zum Focus System

Wenn dann würde ich entsprechende Listener in den JFrame packen, dann reagiert das Programm solange wie das Fenster im Vordergrund ist.

EDIT:
So wie ich deinen Code interpretiere willst du wohl eine Art Spiel machen und ein Panel als Spieler verwenden. Wenn du das in Echtzeit, ohne Flackern und eleganter lösen möchtest, würde ich zu richtiger Grafik raten, sprich: Im Panel in dem sich alles abspielt ca. sowas reintippen:

Code:
@Override
paintComponent(Graphics g) {

int size = 50;
Graphics2D g2d = (Graphics2D)g; // g zu Graphics2D casten

g2d.setcolor(Color.RED); // Farbe rot setzen, wenn man möchte
g2d.fillRect(player.getX(),player.getY(),size,size); // Rechteck zeichnen

}


Kann sein dass da irgendwas nicht zu 100% stimmt, kanns gerade nicht in Eclipse überprüfen.

Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2013 18:19 von laughingMan.

25.11.2013 18:04
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Rroia (Nov-25-2013)
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xGames Ubuntu - SublimeText das Terminal und Java SparkMonkay 0 1.017 18.12.2014 18:55
Letzter Beitrag: SparkMonkay
xGames Datenbank in Java durchsuchen loader72 9 2.665 14.11.2014 21:03
Letzter Beitrag: laughingMan
xGames Win7 Laptop - Operating System not found. Dann aber doch...WTF Axiom_Pwns 5 2.035 01.09.2014 16:23
Letzter Beitrag: laughingMan
xGames Wie zukunftssicher ist mein neues System? thewolf16 39 4.972 08.05.2014 19:45
Letzter Beitrag: thewolf16
xGames System Partiton ändern Gaara4 6 1.816 07.08.2013 22:54
Letzter Beitrag: cortez442

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang