Keylistener problem

Status
Nicht offen für weitere Antworten.
G

grayson

Gast
hallo, ich breche mir gerade an einem keylistener einen ab.

und zwar habe ich eine gui, in der ich chatten kann etc.
ausserdem wird eine zweite gui (von jframe abgeleitet) geöffnet, wenn in meinem spiel ein kampf gemeldet wird.

die erste (chatgui) bleibt aber offen, so das man auch im spiel weiter mit der lobby chatten kann.

das ganze sieht so aus :

klasse chatgui extends jframe ----> der chat
klasse gameclient implements remote blah blub ---> der spieleclient (über rmi)
klasse gameUIContainer extends jframe -----> die spielUI (das grundgerüst buttons , scrollpane etc)
unterklasse von gameclient gameui extends gameUIContainer ----> hier wird die spielkarte in den container eingehängt und die eigendlichen actions etc. implementiert

der konstruktor von gameUI ruft natürlich als erstes super(); auf, damit der gameUIContainer aufgebaut wird.

nun möchte ich auf die spielkarte (extends jcomponent) einen keylistener einhängen oder zumindest doch auf die gameUI, damit ich per tastatur auf der karte scrollen kann und diverse andere sachen.

da aber meine chatUI noch offen ist, bekomme ich zb. requestFocus() immer false, wesshalb natürlich der als anonyme klasse im konstruktor von gameUI eingehängte keylistener nie anspringt.

so, wie bekomm ich nun auf meine spielkarte (liegt im mapScrollPane (ein jscrollpane)) einen keylistener hin, ohne das ich die chatUI zu machen muss?
 

Sky

Top Contributor
Kannst Du das nochmal verständlicher formulieren bzw. mal'n bißchen Code zeigen... ich komm' mit deiner Beschreibung überhaupt nicht zurecht und verstehe das Problem nicht.
 
G

grayson

Gast
also ganz schlicht ausgedrückt : ich hab 2 jframes offen und will auf dem 2ten nen keylistener einhängen.

dummerweise wird der 2te aus dem ersten heraus geöffnet und lässt sich nicht mit requestFocus() fokussieren, womit der keylistener nicht reagiert
 
G

grayson

Gast
der code :
also das hier ist das fenster, wo der listener nicht geht

Code:
package client;

import gui.GameClientContainer;
import .....

/**
 * Der spielclient - hier geht das eigendliche game ab
 */
public class GameClient extends UnicastRemoteObject implements GameClientMethods {

  
    GameUI mUI = new GameUI();

    /**
     * Constructor for GameClient.
     * 
     * @param pl
     *            Planet
     * @param mapID
     *            int
     * @param attacker
     *            User
     * @throws RemoteException
     */
    public GameClient(Planet pl, int mapID, User attacker) throws RemoteException {
        super();
        BasicConfigurator.configure();
        mUser = attacker;
        mPlanet = pl;
        mHexMapID = mapID;
        mUI.setTitle("Strategic Command Console, Commander " + mUser.getName());
        mUI.setSize(new Dimension(800, 700));
        mUI.setCenter();
        mUI.setVisible(true);

    }

 ....methoden......


/*HIER GEHTS LOS; DAS IST DER FRAME AUF DEM DER KEYLISTENER SITZEN SOLL */  
  class GameUI extends GameClientContainer {
        ArrayList mFieldstoMove = new ArrayList();

        Coord mSelected = null;

        public int mSpaceclickcount = 0;

        Unit mUnitToDoAction = null;

        // cursor move codes

        final int CURSOR_UP = 38;

        final int CURSOR_DOWN = 40;

        final int CURSOR_LEFT = 37;

        final int CURSOR_RIGHT = 39;

        private HexMap mHexMap = null;

        public GameUI() {
            super();
       
            
            //das hier geht nicht
            requestFocus();
          addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    moveCursor(e.getKeyCode());
              }
           });
        }
      
     

        /**
         * bewegt den cursor über die map
         * 
         * @param direction
         *            int
         */
        public void moveCursor(int direction) {

            Coord start = mHexMap.getSelection();
            Coord step = null;
            switch (direction) {
            case (CURSOR_UP):
                step = new Coord(start.x, start.y - 1);
                if (step.y < 0 || step.y > mHexMap.getModel().h) {
                } else {

                    mHexMap.setSelection(step);

                    JLabel tmp = new JLabel();
                    tmp.setLocation(mHexMap.getFieldPoint(step));
                    if (this.getMainPanel().getViewport().getViewRect().contains(tmp.getLocation()) == false) {
                        this.getMainPanel().getVerticalScrollBar().setValue((int) mHexMap.getFieldPoint(step).getY());
                    }
                }
                break;

            case (CURSOR_DOWN):
                step = new Coord(start.x, start.y + 1);
                if (step.y < 0 || step.y > mHexMap.getModel().h - 1) {
                } else {
                    mHexMap.setSelection(step);
                    JLabel tmp = new JLabel();
                    tmp.setLocation(mHexMap.getFieldPoint(step));
                    if (this.getMainPanel().getViewport().getViewRect().contains(tmp.getLocation()) == false) {
                        this.getMainPanel().getVerticalScrollBar().setValue((int) mHexMap.getFieldPoint(step).getY());
                    }
                }
                break;

            case (CURSOR_RIGHT):
                step = new Coord(start.x + 1, start.y);
                if (step.x < 0 || step.x > mHexMap.getModel().w - 1) {
                } else {
                    mHexMap.setSelection(step);
                    JLabel tmp = new JLabel();
                    tmp.setLocation(mHexMap.getFieldPoint(step));
                    if (this.getMainPanel().getViewport().getViewRect().contains(tmp.getLocation()) == false) {
                        this.getMainPanel().getHorizontalScrollBar().setValue((int) mHexMap.getFieldPoint(step).getX());
                    }
                }
                break;

            case (CURSOR_LEFT):
                step = new Coord(start.x - 1, start.y);
                if (step.x < 0 || step.x > mHexMap.getModel().w) {
                } else {
                    mHexMap.setSelection(step);
                    JLabel tmp = new JLabel();
                    tmp.setLocation(mHexMap.getFieldPoint(step));
                    if (this.getMainPanel().getViewport().getViewRect().contains(tmp.getLocation()) == false) {
                        this.getMainPanel().getHorizontalScrollBar().setValue((int) mHexMap.getFieldPoint(step).getX());
                    }
                }
                break;

            }

        }

     

     
}

naja und hier wird das obige fenster aus einem anderen geöffnet :

Code:
....
 try {
            GameClient game = new GameClient(pl, mapID, mUser);
            HexMap map = new MapFileHandler().LoadMap(mServer.getMapForID(mapID).getDoc());

            game.setMap(map);
            game.actAsServer(mServer);
            game.setMMyUnits(mServer.getUnitsForPlayer(mUser.getID()));

        } catch (RemoteException rex) {
            log.error("could not start gameclient! " + rex);
            return;
        }

.....
 

Sky

Top Contributor
Es könnte daran liegen, dass Du in die "requestFocus();" aufrufst, bevor der Frame sichtbar ist.
Ruf mal im Konstruktor von 'GameClient' nach dem "mUI.setVisible(true);" folgendes auf:
Code:
mUI.requestFocus();
 

TRunKX

Bekanntes Mitglied
Ich weiss das es dumm klingt aber der Key Listener muss auch implementiert werden



..... implements KeyListener sollte da oben noch hin oder hat das beerbte Objekt sowas schon???

Stehe da gerade etwas auf dem schlauch ... Und der Focus wechselt normal autom ins neue Fenster!
 

Sky

Top Contributor
TRunKX hat gesagt.:
..... implements KeyListener sollte da oben noch hin oder hat das beerbte Objekt sowas schon???

Prinzipiell schon vorhanden:
siehe
Code:
addKeyListener(new KeyAdapter() {
  public void keyPressed(KeyEvent e) { 
    moveCursor(e.getKeyCode()); 
  } 
});

Es wird eine neue Instanz der Klasse KeyAdapter erzeugt (naja, eigentlich ist es eine anonyme Klasse, die von KeyAdapter erbt), bei der die Methode keyPressed überschrieben ist. Die Klasse KeyAdapter implementiert in diesem Fall das notwendige Interface.
 
G

grayson

Gast
aye, habs mittlerweile auch hin bekommen.

die anonyme klasse wird nun nicht mehr im konstruktor der gameUI implementiert sondern in der übergeordneten klasse gameclient ----> find ich zwar doof, weil ich den code dort halten wollte, wo er etwas bewirken soll aber ok.

sieht dann so aus :

Code:
public GameClient(Planet pl, int mapID, User attacker) throws RemoteException {
        super();
        BasicConfigurator.configure();
        mUser = attacker;
        mPlanet = pl;
        mHexMapID = mapID;
        mUI.setTitle("Strategic Command Console, Commander " + mUser.getName());
        mUI.setSize(new Dimension(800, 700));
        mUI.setCenter();
        mUI.setVisible(true);
       // so geht es ---> fragt mich nicht warum
       mUI.requestFocus();
  
// sieht aus, als wenn standardmäßig schon einer da wäre, der mit den cursortasten brechend langsam die karte scrollt
//----> aber ich hab den nicht eingehängt, scheint son standard swing teil zu sein, das per default auf nem scrollpane
//liegt...?!?  naja, jedenfalls nehm ich ihn hier erstmal weg sicher ist sicher ;)
  for(int i=0;i<mUI.getKeyListeners().length;i++){
        KeyListener l = mUI.getKeyListeners()[i];
        mUI.removeKeyListener(l);
    }
        
  // so und nun geht es :D
        mUI.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
       ....


Zeilenumbrüche eingefügt / Stefan1200
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
M problem mit keylistener Java Basics - Anfänger-Themen 2
C Einloggen auch per ENTER Taste (KeyListener Problem) Java Basics - Anfänger-Themen 8
B KeyListener Problem Java Basics - Anfänger-Themen 11
O 2 TextFields + 1 KeyListener = Problem :( Java Basics - Anfänger-Themen 2
D Fokus-Problem mit KeyListener Java Basics - Anfänger-Themen 2
J Problem mit KeyListener in einem Spiel Java Basics - Anfänger-Themen 5
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben